avoid deadlock by calling begin_trans() before locking any inodes

This commit is contained in:
Robert Morris 2011-08-15 12:44:20 -04:00
parent c95ce31c59
commit 5053dd6a6d
5 changed files with 66 additions and 15 deletions

7
fs.c
View file

@ -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;