avoid deadlock by calling begin_trans() before locking any inodes
This commit is contained in:
parent
c95ce31c59
commit
5053dd6a6d
5 changed files with 66 additions and 15 deletions
7
fs.c
7
fs.c
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue