change ip->flags&I_VALID to ip->valid
This commit is contained in:
		
							parent
							
								
									14270288b7
								
							
						
					
					
						commit
						3375df5061
					
				
					 2 changed files with 11 additions and 12 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue