#ifdef NFS_DEBUG_VERBOSE printk(KERN_DEBUG "NFS: mtime change on %s/%ld\n", inode->i_sb->s_id, inode->i_ino); #endif 
dprintk("NFS: mtime change on server for file %s/%ld\n", inode->i_sb->s_id, inode->i_ino); 
static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsigned long verifier){	struct nfs_inode *nfsi = NFS_I(inode);	__u64		new_size;	loff_t		new_isize;	unsigned int	invalid = 0;	loff_t		cur_isize;	int data_unstable;	dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n",			__FUNCTION__, inode->i_sb->s_id, inode->i_ino,			atomic_read(&inode->i_count), fattr->valid);	if ((fattr->valid & NFS_ATTR_FATTR) == 0)		return 0;	if (nfsi->fileid != fattr->fileid) {		printk(KERN_ERR "%s: inode number mismatch\n"		       "expected (%s/0x%Lx), got (%s/0x%Lx)\n",		       __FUNCTION__,		       inode->i_sb->s_id, (long long)nfsi->fileid,		       inode->i_sb->s_id, (long long)fattr->fileid);		goto out_err;	}	/*	 * Make sure the inode's type hasn't changed.	 */	if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))		goto out_changed;	/*	 * Update the read time so we don't revalidate too often.	 */	nfsi->read_cache_jiffies = fattr->timestamp;	/* Are we racing with known updates of the metadata on the server? */	data_unstable = ! nfs_verify_change_attribute(inode, verifier);	/* Check if the file size agrees */	new_size = fattr->size; 	new_isize = nfs_size_to_loff_t(fattr->size);	cur_isize = i_size_read(inode);	if (cur_isize != new_size) {#ifdef NFS_DEBUG_VERBOSE		printk(KERN_DEBUG "NFS: isize change on %s/%ld\n", inode->i_sb->s_id, inode->i_ino);#endif		/*		 * If we have pending writebacks, things can get		 * messy.		 */		if (S_ISREG(inode->i_mode) && data_unstable) {			if (new_isize > cur_isize) {				inode->i_size = new_isize;				invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;			}		} else {			inode->i_size = new_isize;			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;		}	}	/*	 * Note: we don't check inode->i_mtime since pipes etc.	 *       can change this value in VFS without requiring a	 *	 cache revalidation.	 */	if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) {		memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));#ifdef NFS_DEBUG_VERBOSE		printk(KERN_DEBUG "NFS: mtime change on %s/%ld\n", inode->i_sb->s_id, inode->i_ino);#endif		if (!data_unstable)			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;	}	if ((fattr->valid & NFS_ATTR_FATTR_V4)	    && nfsi->change_attr != fattr->change_attr) {#ifdef NFS_DEBUG_VERBOSE		printk(KERN_DEBUG "NFS: change_attr change on %s/%ld\n",		       inode->i_sb->s_id, inode->i_ino);#endif		nfsi->change_attr = fattr->change_attr;		if (!data_unstable)			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;	}	/* If ctime has changed we should definitely clear access+acl caches */	if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) {		if (!data_unstable)			invalid |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;		memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));	}	memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));	if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) ||	    inode->i_uid != fattr->uid ||	    inode->i_gid != fattr->gid)		invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;	inode->i_mode = fattr->mode;	inode->i_nlink = fattr->nlink;	inode->i_uid = fattr->uid;	inode->i_gid = fattr->gid;	if (fattr->valid & (NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4)) {		/*		 * report the blocks in 512byte units		 */		inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);		inode->i_blksize = inode->i_sb->s_blocksize; 	} else { 		inode->i_blocks = fattr->du.nfs2.blocks; 		inode->i_blksize = fattr->du.nfs2.blocksize; 	}	/* Update attrtimeo value if we're out of the unstable period */	if (invalid & NFS_INO_INVALID_ATTR) {		nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);		nfsi->attrtimeo_timestamp = jiffies;	} else if (time_after(jiffies, nfsi->attrtimeo_timestamp+nfsi->attrtimeo)) {		if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode))			nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);		nfsi->attrtimeo_timestamp = jiffies;	}	/* Don't invalidate the data if we were to blame */	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)				|| S_ISLNK(inode->i_mode)))		invalid &= ~NFS_INO_INVALID_DATA;	if (!nfs_have_delegation(inode, FMODE_READ))		nfsi->flags |= invalid;	return 0; out_changed:	/*	 * Big trouble! The inode has become a different object.	 */#ifdef NFS_PARANOIA	printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n",			__FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode);#endif	/*	 * No need to worry about unhashing the dentry, as the	 * lookup validation will know that the inode is bad.	 * (But we fall through to invalidate the caches.)	 */	nfs_invalidate_inode(inode); out_err:	NFS_FLAGS(inode) |= NFS_INO_STALE;	return -ESTALE;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/951a143b3fcf15cfa9d38250b7462f821db241db/inode.c/clean/fs/nfs/inode.c