change ip->flags&I_VALID to ip->valid

This commit is contained in:
Robert Morris 2017-08-08 13:34:13 -04:00
parent 14270288b7
commit 3375df5061
2 changed files with 11 additions and 12 deletions

3
file.h
View file

@ -15,7 +15,7 @@ struct inode {
uint inum; // Inode number uint inum; // Inode number
int ref; // Reference count int ref; // Reference count
struct sleeplock lock; struct sleeplock lock;
int flags; // I_VALID int valid; // remainder has been read from disk?
short type; // copy of disk inode short type; // copy of disk inode
short major; short major;
@ -24,7 +24,6 @@ struct inode {
uint size; uint size;
uint addrs[NDIRECT+1]; uint addrs[NDIRECT+1];
}; };
#define I_VALID 0x2
// table mapping major device number to // table mapping major device number to
// device functions // device functions

20
fs.c
View file

@ -110,7 +110,7 @@ bfree(int dev, uint b)
// to provide a place for synchronizing access // to provide a place for synchronizing access
// to inodes used by multiple processes. The cached // to inodes used by multiple processes. The cached
// inodes include book-keeping information that is // inodes include book-keeping information that is
// not stored on disk: ip->ref and ip->flags. // not stored on disk: ip->ref and ip->valid.
// //
// An inode and its in-memory representation go through a // An inode and its in-memory representation go through a
// sequence of states before they can be used by the // sequence of states before they can be used by the
@ -128,10 +128,10 @@ bfree(int dev, uint b)
// decrements ref. // decrements ref.
// //
// * Valid: the information (type, size, &c) in an inode // * Valid: the information (type, size, &c) in an inode
// cache entry is only correct when the I_VALID bit // cache entry is only correct when ip->valid is 1.
// is set in ip->flags. ilock() reads the inode from // ilock() reads the inode from
// the disk and sets I_VALID, while iput() clears // the disk and sets ip->valid, while iput() clears
// I_VALID if ip->ref has fallen to zero. // ip->valid if ip->ref has fallen to zero.
// //
// * Locked: file system code may only examine and modify // * Locked: file system code may only examine and modify
// the information in an inode and its content if it // the information in an inode and its content if it
@ -253,7 +253,7 @@ iget(uint dev, uint inum)
ip->dev = dev; ip->dev = dev;
ip->inum = inum; ip->inum = inum;
ip->ref = 1; ip->ref = 1;
ip->flags = 0; ip->valid = 0;
release(&icache.lock); release(&icache.lock);
return ip; return ip;
@ -283,7 +283,7 @@ ilock(struct inode *ip)
acquiresleep(&ip->lock); acquiresleep(&ip->lock);
if((ip->flags & I_VALID) == 0){ if(ip->valid == 0){
bp = bread(ip->dev, IBLOCK(ip->inum, sb)); bp = bread(ip->dev, IBLOCK(ip->inum, sb));
dip = (struct dinode*)bp->data + ip->inum%IPB; dip = (struct dinode*)bp->data + ip->inum%IPB;
ip->type = dip->type; ip->type = dip->type;
@ -293,7 +293,7 @@ ilock(struct inode *ip)
ip->size = dip->size; ip->size = dip->size;
memmove(ip->addrs, dip->addrs, sizeof(ip->addrs)); memmove(ip->addrs, dip->addrs, sizeof(ip->addrs));
brelse(bp); brelse(bp);
ip->flags |= I_VALID; ip->valid = 1;
if(ip->type == 0) if(ip->type == 0)
panic("ilock: no type"); panic("ilock: no type");
} }
@ -320,7 +320,7 @@ void
iput(struct inode *ip) iput(struct inode *ip)
{ {
acquire(&icache.lock); acquire(&icache.lock);
if(ip->ref == 1 && (ip->flags & I_VALID) && ip->nlink == 0){ if(ip->ref == 1 && ip->valid && ip->nlink == 0){
// inode has no links and no other references: truncate and free. // inode has no links and no other references: truncate and free.
acquiresleep(&ip->lock); acquiresleep(&ip->lock);
release(&icache.lock); release(&icache.lock);
@ -328,7 +328,7 @@ iput(struct inode *ip)
ip->type = 0; ip->type = 0;
iupdate(ip); iupdate(ip);
acquire(&icache.lock); acquire(&icache.lock);
ip->flags = 0; ip->valid = 0;
releasesleep(&ip->lock); releasesleep(&ip->lock);
} }
ip->ref--; ip->ref--;