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:
Frans Kaashoek 2011-08-29 17:18:40 -04:00
parent 22f7db5336
commit 1ddfbbb194
12 changed files with 61 additions and 105 deletions

14
log.c
View file

@ -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);