struct buf { int flags; uint dev; // 64-bit, because the filesystem's block numbers are. This was a uint, which // capped any device at 2^32 blocks (16 TB at 4 KB) no matter what the format // above it could address -- SchFS is a 64-bit format and was being served by // a 32-bit cache. uint64 blockno; struct sleeplock lock; uint refcnt; struct buf *prev; // LRU cache list struct buf *next; struct buf *qnext; // disk queue uchar data[BSIZE]; }; #define B_VALID 0x2 // buffer has been read from disk #define B_DIRTY 0x4 // buffer needs to be written to disk