Skip to content
Snippets Groups Projects
Commit 0ca9ca0c authored by rsc's avatar rsc
Browse files

slight rearrangement; sleep on b not buf.

parent d827c8f3
No related branches found
No related tags found
No related merge requests found
...@@ -69,22 +69,22 @@ bget(uint dev, uint sector) ...@@ -69,22 +69,22 @@ bget(uint dev, uint sector)
for(b = bufhead.next; b != &bufhead; b = b->next){ for(b = bufhead.next; b != &bufhead; b = b->next){
if((b->flags & (B_BUSY|B_VALID)) && if((b->flags & (B_BUSY|B_VALID)) &&
b->dev == dev && b->sector == sector){ b->dev == dev && b->sector == sector){
if(b->flags & B_BUSY){ if(!(b->flags & B_BUSY)){
sleep(buf, &buf_table_lock); b->flags |= B_BUSY;
goto loop; release(&buf_table_lock);
return b;
} }
b->flags |= B_BUSY; sleep(b, &buf_table_lock);
release(&buf_table_lock); goto loop;
return b;
} }
} }
// Allocate fresh block. // Allocate fresh block.
for(b = bufhead.prev; b != &bufhead; b = b->prev){ for(b = bufhead.prev; b != &bufhead; b = b->prev){
if((b->flags & B_BUSY) == 0){ if((b->flags & B_BUSY) == 0){
b->flags = B_BUSY;
b->dev = dev; b->dev = dev;
b->sector = sector; b->sector = sector;
b->flags = B_BUSY;
release(&buf_table_lock); release(&buf_table_lock);
return b; return b;
} }
...@@ -131,7 +131,7 @@ brelse(struct buf *b) ...@@ -131,7 +131,7 @@ brelse(struct buf *b)
bufhead.next = b; bufhead.next = b;
b->flags &= ~B_BUSY; b->flags &= ~B_BUSY;
wakeup(buf); wakeup(b);
release(&buf_table_lock); release(&buf_table_lock);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment