summaryrefslogtreecommitdiff
path: root/bio.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-14 19:42:14 +0000
committerrsc <rsc>2007-08-14 19:42:14 +0000
commit0655445ba911b59378c57e0c58258c7d6c171880 (patch)
tree171d6f90c0f4f1c4a8626e8af5abb5182099b32f /bio.c
parent2186f88c211b26e2807fbe8f0752e51dcc533ce3 (diff)
downloadxv6-labs-0655445ba911b59378c57e0c58258c7d6c171880.tar.gz
xv6-labs-0655445ba911b59378c57e0c58258c7d6c171880.tar.bz2
xv6-labs-0655445ba911b59378c57e0c58258c7d6c171880.zip
cleanup loop
Diffstat (limited to 'bio.c')
-rw-r--r--bio.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/bio.c b/bio.c
index 4ead39f..feeda5f 100644
--- a/bio.c
+++ b/bio.c
@@ -71,20 +71,18 @@ bget(uint dev, uint sector)
loop:
// Try for cached block.
- 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)) &&
- b->dev == dev && b->sector == sector)
- break;
-
- if(b != &bufhead){
- if(b->flags & B_BUSY){
- sleep(buf, &buf_table_lock);
- goto loop;
+ b->dev == dev && b->sector == sector){
+ if(b->flags & B_BUSY){
+ sleep(buf, &buf_table_lock);
+ goto loop;
+ }
+ b->flags |= B_BUSY;
+ // b->flags &= ~B_VALID; // Force reread from disk
+ release(&buf_table_lock);
+ return b;
}
- b->flags |= B_BUSY;
- // b->flags &= ~B_VALID; // Force reread from disk
- release(&buf_table_lock);
- return b;
}
// Allocate fresh block.