summaryrefslogtreecommitdiff
path: root/fs.c
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2011-07-27 20:35:46 -0400
committerFrans Kaashoek <[email protected]>2011-07-27 20:35:46 -0400
commit13a96baefc0ff5d8262c4bc8c797bee4b157443c (patch)
treea84aa8ed35618f99c3d7e8cdd466d22ae7bad597 /fs.c
parent97657d703f7a92a088b400980c17249f34640a5e (diff)
downloadxv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.tar.gz
xv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.tar.bz2
xv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.zip
Dirt simple logging
Passes usertests and stressfs Seems to recover correctly in a number of simple cases
Diffstat (limited to 'fs.c')
-rw-r--r--fs.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs.c b/fs.c
index 7c6d904..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;
@@ -65,7 +65,7 @@ balloc(uint dev)
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;