diff options
| author | rsc <rsc> | 2009-05-31 00:23:00 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2009-05-31 00:23:00 +0000 | 
| commit | 0ca9ca0c55922f72dbf324c4ac1aecf8069d1dbe (patch) | |
| tree | d1795309704cde0b2936653f8fee83acaac43341 | |
| parent | d827c8f3c82208c1df5c13b191880824f864fa91 (diff) | |
| download | xv6-labs-0ca9ca0c55922f72dbf324c4ac1aecf8069d1dbe.tar.gz xv6-labs-0ca9ca0c55922f72dbf324c4ac1aecf8069d1dbe.tar.bz2 xv6-labs-0ca9ca0c55922f72dbf324c4ac1aecf8069d1dbe.zip | |
slight rearrangement; sleep on b not buf.
| -rw-r--r-- | bio.c | 16 | 
1 files changed, 8 insertions, 8 deletions
| @@ -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;        } -      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);  } | 
