1 struct buf { 2 int flags; 3 uint dev; 4 uint blockno; 5 struct sleeplock lock; 6 struct buf *prev; // LRU cache list 7 struct buf *next; 8 struct buf *qnext; // disk queue 9 uchar data[BSIZE]; 10 }; 11 #define B_VALID 0x2 // buffer has been read from disk 12 #define B_DIRTY 0x4 // buffer needs to be written to disk 13 14