Revert "Introduce and use sleeplocks instead of BUSY flags"
My changes have a race with re-used bufs and the code doesn't seem to get shorter
Keep the changes that fixed ip->off race
This reverts commit 3a5fa7ed90.
Conflicts:
defs.h
file.c
file.h
This commit is contained in:
parent
22f7db5336
commit
1ddfbbb194
12 changed files with 61 additions and 105 deletions
14
log.c
14
log.c
|
|
@ -43,9 +43,9 @@ struct logheader {
|
|||
|
||||
struct {
|
||||
struct spinlock lock;
|
||||
struct sleeplock sleeplock;
|
||||
int start;
|
||||
int size;
|
||||
int intrans;
|
||||
int dev;
|
||||
struct logheader lh;
|
||||
} log;
|
||||
|
|
@ -60,7 +60,6 @@ initlog(void)
|
|||
|
||||
struct superblock sb;
|
||||
initlock(&log.lock, "log");
|
||||
initsleeplock(&log.sleeplock);
|
||||
readsb(ROOTDEV, &sb);
|
||||
log.start = sb.size - sb.nlog;
|
||||
log.size = sb.nlog;
|
||||
|
|
@ -134,7 +133,10 @@ void
|
|||
begin_trans(void)
|
||||
{
|
||||
acquire(&log.lock);
|
||||
acquire_sleeplock(&log.sleeplock, &log.lock);
|
||||
while (log.intrans) {
|
||||
sleep(&log, &log.lock);
|
||||
}
|
||||
log.intrans = 1;
|
||||
release(&log.lock);
|
||||
}
|
||||
|
||||
|
|
@ -147,8 +149,10 @@ commit_trans(void)
|
|||
log.lh.n = 0;
|
||||
write_head(); // Reclaim log
|
||||
}
|
||||
|
||||
acquire(&log.lock);
|
||||
release_sleeplock(&log.sleeplock);
|
||||
log.intrans = 0;
|
||||
wakeup(&log);
|
||||
release(&log.lock);
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +171,7 @@ log_write(struct buf *b)
|
|||
|
||||
if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1)
|
||||
panic("too big a transaction");
|
||||
if (!acquired_sleeplock(&log.sleeplock))
|
||||
if (!log.intrans)
|
||||
panic("write outside of trans");
|
||||
|
||||
// cprintf("log_write: %d %d\n", b->sector, log.lh.n);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue