change ip->flags&I_VALID to ip->valid
This commit is contained in:
parent
14270288b7
commit
3375df5061
3
file.h
3
file.h
|
@ -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
20
fs.c
|
@ -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--;
|
||||||
|
|
Loading…
Reference in a new issue