commit f12551b5996ae6121d33afc94002ce6f7c64dcfd
parent 0badeaa29fa6bd7e72e460f4c4c68d57fec8e388
Author: rsc <rsc>
Date: Sun, 31 May 2009 01:34:46 +0000
inode reuse bug.
Suppose an inode has been used and freed.
It is left marked I_VALID (the bug).
Now ialloc comes along and reuses the
inode. It writes the new inode type to disk
and returns iget(dev, inum) to get the
cache entry. Iget sees that the inode is valid
and doesn't bother refreshing from disk.
Now when the caller iupdates, it will write
out a zero type and the file or directory has
disappeared.
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs.c b/fs.c
@@ -227,7 +227,7 @@ iunlock(struct inode *ip)
panic("iunlock");
acquire(&icache.lock);
- ip->flags &= ~I_BUSY;
+ ip->flags = 0;
wakeup(ip);
release(&icache.lock);
}