summaryrefslogtreecommitdiff
path: root/bio.c
diff options
context:
space:
mode:
authorrsc <rsc>2006-09-07 15:29:54 +0000
committerrsc <rsc>2006-09-07 15:29:54 +0000
commit19297caf0d141e23fa2f5da6e2fb0ffa181d7a82 (patch)
tree573b4eef9c6f683b42f3ddb69679b9be7a8e0649 /bio.c
parent6c8acf9e046aaf31f528e1890c923525552b0dd4 (diff)
downloadxv6-labs-19297caf0d141e23fa2f5da6e2fb0ffa181d7a82.tar.gz
xv6-labs-19297caf0d141e23fa2f5da6e2fb0ffa181d7a82.tar.bz2
xv6-labs-19297caf0d141e23fa2f5da6e2fb0ffa181d7a82.zip
fix ide, pit interfaces
Diffstat (limited to 'bio.c')
-rw-r--r--bio.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/bio.c b/bio.c
index f157305..43286da 100644
--- a/bio.c
+++ b/bio.c
@@ -102,37 +102,28 @@ bget(uint dev, uint sector)
struct buf*
bread(uint dev, uint sector)
{
- void *c;
struct buf *b;
- extern struct spinlock ide_lock;
b = bget(dev, sector);
if(b->flags & B_VALID)
return b;
- acquire(&ide_lock);
- c = ide_start_rw(dev & 0xff, sector, b->data, 1, 1);
- sleep(c, &ide_lock);
- ide_finish(c);
+ ide_rw(dev & 0xff, sector, b->data, 1, 1);
b->flags |= B_VALID;
- release(&ide_lock);
return b;
}
// Write buf's contents to disk.
+// Must be locked.
void
bwrite(struct buf *b, uint sector)
{
- void *c;
- extern struct spinlock ide_lock;
+ if((b->flags & B_BUSY) == 0)
+ panic("bwrite");
- acquire(&ide_lock);
- c = ide_start_rw(b->dev & 0xff, sector, b->data, 1, 0);
- sleep(c, &ide_lock);
- ide_finish(c);
+ ide_rw(b->dev & 0xff, sector, b->data, 1, 0);
b->flags |= B_VALID;
- release(&ide_lock);
}
// Release the buffer buf.