summaryrefslogtreecommitdiff
path: root/fs.c
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2011-07-27 20:49:45 -0400
committerFrans Kaashoek <[email protected]>2011-07-27 20:49:45 -0400
commitdccb915282854476ce47752df6631dcce3b8f661 (patch)
treea84aa8ed35618f99c3d7e8cdd466d22ae7bad597 /fs.c
parent9acdfe0d04f3fcf95c6e392e08afb45bdfe16c20 (diff)
parent13a96baefc0ff5d8262c4bc8c797bee4b157443c (diff)
downloadxv6-labs-dccb915282854476ce47752df6631dcce3b8f661.tar.gz
xv6-labs-dccb915282854476ce47752df6631dcce3b8f661.tar.bz2
xv6-labs-dccb915282854476ce47752df6631dcce3b8f661.zip
Merge commit 'origin/master' into page
Diffstat (limited to 'fs.c')
-rw-r--r--fs.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs.c b/fs.c
index 15a4d35..a414b65 100644
--- a/fs.c
+++ b/fs.c
@@ -25,7 +25,7 @@
static void itrunc(struct inode*);
// Read the super block.
-static void
+void
readsb(int dev, struct superblock *sb)
{
struct buf *bp;
@@ -61,11 +61,11 @@ balloc(uint dev)
readsb(dev, &sb);
for(b = 0; b < sb.size; b += BPB){
bp = bread(dev, BBLOCK(b, sb.ninodes));
- for(bi = 0; bi < BPB; bi++){
+ for(bi = 0; bi < BPB && bi < (sb.size - b); bi++){
m = 1 << (bi % 8);
if((bp->data[bi/8] & m) == 0){ // Is block free?
bp->data[bi/8] |= m; // Mark block in use on disk.
- bwrite(bp);
+ log_write(bp);
brelse(bp);
return b + bi;
}
@@ -92,7 +92,7 @@ bfree(int dev, uint b)
if((bp->data[bi/8] & m) == 0)
panic("freeing free block");
bp->data[bi/8] &= ~m; // Mark block free on disk.
- bwrite(bp);
+ log_write(bp);
brelse(bp);
}
@@ -159,7 +159,7 @@ ialloc(uint dev, short type)
if(dip->type == 0){ // a free inode
memset(dip, 0, sizeof(*dip));
dip->type = type;
- bwrite(bp); // mark it allocated on the disk
+ log_write(bp); // mark it allocated on the disk
brelse(bp);
return iget(dev, inum);
}
@@ -183,7 +183,7 @@ iupdate(struct inode *ip)
dip->nlink = ip->nlink;
dip->size = ip->size;
memmove(dip->addrs, ip->addrs, sizeof(ip->addrs));
- bwrite(bp);
+ log_write(bp);
brelse(bp);
}
@@ -339,7 +339,7 @@ bmap(struct inode *ip, uint bn)
a = (uint*)bp->data;
if((addr = a[bn]) == 0){
a[bn] = addr = balloc(ip->dev);
- bwrite(bp);
+ log_write(bp);
}
brelse(bp);
return addr;