diff options
author | Sanjit Bhat <[email protected]> | 2023-10-30 14:39:28 -0500 |
---|---|---|
committer | Sanjit Bhat <[email protected]> | 2023-10-30 14:39:28 -0500 |
commit | 3808f903625f42f58aa95e43e3caca3efaa4d118 (patch) | |
tree | ad8f5a0e376c246cb60c7cd0940517ea834e610e /kernel/fs.c | |
parent | 74c1eba516fdb0ec1a17b16be7e76613ccba92bf (diff) | |
download | xv6-labs-3808f903625f42f58aa95e43e3caca3efaa4d118.tar.gz xv6-labs-3808f903625f42f58aa95e43e3caca3efaa4d118.tar.bz2 xv6-labs-3808f903625f42f58aa95e43e3caca3efaa4d118.zip |
lock: release lab
Diffstat (limited to 'kernel/fs.c')
-rw-r--r-- | kernel/fs.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/fs.c b/kernel/fs.c index c6bab15..6c4079e 100644 --- a/kernel/fs.c +++ b/kernel/fs.c @@ -295,11 +295,11 @@ ilock(struct inode *ip) struct buf *bp; struct dinode *dip; - if(ip == 0 || ip->ref < 1) + if(ip == 0 || atomic_read4(&ip->ref) < 1) panic("ilock"); acquiresleep(&ip->lock); - + if(ip->valid == 0){ bp = bread(ip->dev, IBLOCK(ip->inum, sb)); dip = (struct dinode*)bp->data + ip->inum%IPB; @@ -320,7 +320,7 @@ ilock(struct inode *ip) void iunlock(struct inode *ip) { - if(ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) + if(ip == 0 || !holdingsleep(&ip->lock) || atomic_read4(&ip->ref) < 1) panic("iunlock"); releasesleep(&ip->lock); @@ -416,7 +416,6 @@ bmap(struct inode *ip, uint bn) brelse(bp); return addr; } - panic("bmap: out of range"); } @@ -447,7 +446,7 @@ itrunc(struct inode *ip) bfree(ip->dev, ip->addrs[NDIRECT]); ip->addrs[NDIRECT] = 0; } - + ip->size = 0; iupdate(ip); } |