diff options
author | rsc <rsc> | 2006-09-07 15:29:54 +0000 |
---|---|---|
committer | rsc <rsc> | 2006-09-07 15:29:54 +0000 |
commit | 19297caf0d141e23fa2f5da6e2fb0ffa181d7a82 (patch) | |
tree | 573b4eef9c6f683b42f3ddb69679b9be7a8e0649 /bio.c | |
parent | 6c8acf9e046aaf31f528e1890c923525552b0dd4 (diff) | |
download | xv6-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.c | 19 |
1 files changed, 5 insertions, 14 deletions
@@ -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. |