diff options
author | Robert Morris <[email protected]> | 2011-08-15 12:44:20 -0400 |
---|---|---|
committer | Robert Morris <[email protected]> | 2011-08-15 12:44:20 -0400 |
commit | 5053dd6a6d2b481bfcddbd91bacc885b9f0e0ff5 (patch) | |
tree | ca7d000f9996082466bdfe8c7a0c9667341f2dfa /fs.c | |
parent | c95ce31c5978bd43e1f0d34e51a4e3d7bcc41b14 (diff) | |
download | xv6-labs-5053dd6a6d2b481bfcddbd91bacc885b9f0e0ff5.tar.gz xv6-labs-5053dd6a6d2b481bfcddbd91bacc885b9f0e0ff5.tar.bz2 xv6-labs-5053dd6a6d2b481bfcddbd91bacc885b9f0e0ff5.zip |
avoid deadlock by calling begin_trans() before locking any inodes
Diffstat (limited to 'fs.c')
-rw-r--r-- | fs.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -43,13 +43,13 @@ bzero(int dev, int bno) bp = bread(dev, bno); memset(bp->data, 0, BSIZE); - bwrite(bp); + log_write(bp); brelse(bp); } // Blocks. -// Allocate a disk block. +// Allocate a zeroed disk block. static uint balloc(uint dev) { @@ -67,6 +67,7 @@ balloc(uint dev) bp->data[bi/8] |= m; // Mark block in use on disk. log_write(bp); brelse(bp); + bzero(dev, b + bi); return b + bi; } } @@ -83,8 +84,6 @@ bfree(int dev, uint b) struct superblock sb; int bi, m; - bzero(dev, b); - readsb(dev, &sb); bp = bread(dev, BBLOCK(b, sb.ninodes)); bi = b % BPB; |