summaryrefslogtreecommitdiff
path: root/buf.h
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2011-08-26 10:08:29 -0400
committerFrans Kaashoek <[email protected]>2011-08-26 10:08:29 -0400
commit3a5fa7ed9020eaf8ab843a16d26db7393b2ec072 (patch)
treebfa4ad4ae03d7d21796bacaa7eab8e3d3e4ab365 /buf.h
parent8a9b6dbd4468f6312f1d07226a623879f970bd4b (diff)
downloadxv6-labs-3a5fa7ed9020eaf8ab843a16d26db7393b2ec072.tar.gz
xv6-labs-3a5fa7ed9020eaf8ab843a16d26db7393b2ec072.tar.bz2
xv6-labs-3a5fa7ed9020eaf8ab843a16d26db7393b2ec072.zip
Introduce and use sleeplocks instead of BUSY flags
Remove I_BUSY, B_BUSY, and intrans defs and usages One spinlock per buf to avoid ugly loop in bget fix race in filewrite (don't update f->off after releasing lock)
Diffstat (limited to 'buf.h')
-rw-r--r--buf.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/buf.h b/buf.h
index 9c586f2..cfeb8c6 100644
--- a/buf.h
+++ b/buf.h
@@ -2,12 +2,13 @@ struct buf {
int flags;
uint dev;
uint sector;
+ struct spinlock lock;
+ struct sleeplock sleeplock;
struct buf *prev; // LRU cache list
struct buf *next;
struct buf *qnext; // disk queue
uchar data[512];
};
-#define B_BUSY 0x1 // buffer is locked by some process
-#define B_VALID 0x2 // buffer has been read from disk
-#define B_DIRTY 0x4 // buffer needs to be written to disk
+#define B_VALID 0x1 // buffer has been read from disk
+#define B_DIRTY 0x2 // buffer needs to be written to disk