提交 0ca9ca0c 创建 作者: rsc's avatar rsc

slight rearrangement; sleep on b not buf.

上级 d827c8f3
......@@ -69,22 +69,22 @@ bget(uint dev, uint sector)
for(b = bufhead.next; b != &bufhead; b = b->next){
if((b->flags & (B_BUSY|B_VALID)) &&
b->dev == dev && b->sector == sector){
if(b->flags & B_BUSY){
sleep(buf, &buf_table_lock);
goto loop;
}
if(!(b->flags & B_BUSY)){
b->flags |= B_BUSY;
release(&buf_table_lock);
return b;
}
sleep(b, &buf_table_lock);
goto loop;
}
}
// Allocate fresh block.
for(b = bufhead.prev; b != &bufhead; b = b->prev){
if((b->flags & B_BUSY) == 0){
b->flags = B_BUSY;
b->dev = dev;
b->sector = sector;
b->flags = B_BUSY;
release(&buf_table_lock);
return b;
}
......@@ -131,7 +131,7 @@ brelse(struct buf *b)
bufhead.next = b;
b->flags &= ~B_BUSY;
wakeup(buf);
wakeup(b);
release(&buf_table_lock);
}
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论