|
@@ -1275,14 +1275,26 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
|
nfs_display_fhandle_hash(NFS_FH(inode)),
|
|
|
atomic_read(&inode->i_count), fattr->valid);
|
|
|
|
|
|
- if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
|
|
|
- goto out_fileid;
|
|
|
+ if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid) {
|
|
|
+ printk(KERN_ERR "NFS: server %s error: fileid changed\n"
|
|
|
+ "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
|
|
|
+ NFS_SERVER(inode)->nfs_client->cl_hostname,
|
|
|
+ inode->i_sb->s_id, (long long)nfsi->fileid,
|
|
|
+ (long long)fattr->fileid);
|
|
|
+ goto out_err;
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* Make sure the inode's type hasn't changed.
|
|
|
*/
|
|
|
- if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
|
|
|
- goto out_changed;
|
|
|
+ if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) {
|
|
|
+ /*
|
|
|
+ * Big trouble! The inode has become a different object.
|
|
|
+ */
|
|
|
+ printk(KERN_DEBUG "NFS: %s: inode %ld mode changed, %07o to %07o\n",
|
|
|
+ __func__, inode->i_ino, inode->i_mode, fattr->mode);
|
|
|
+ goto out_err;
|
|
|
+ }
|
|
|
|
|
|
server = NFS_SERVER(inode);
|
|
|
/* Update the fsid? */
|
|
@@ -1443,12 +1455,6 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
|
nfsi->cache_validity |= invalid;
|
|
|
|
|
|
return 0;
|
|
|
- out_changed:
|
|
|
- /*
|
|
|
- * Big trouble! The inode has become a different object.
|
|
|
- */
|
|
|
- printk(KERN_DEBUG "NFS: %s: inode %ld mode changed, %07o to %07o\n",
|
|
|
- __func__, inode->i_ino, inode->i_mode, fattr->mode);
|
|
|
out_err:
|
|
|
/*
|
|
|
* No need to worry about unhashing the dentry, as the
|
|
@@ -1457,13 +1463,6 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
|
*/
|
|
|
nfs_invalidate_inode(inode);
|
|
|
return -ESTALE;
|
|
|
-
|
|
|
- out_fileid:
|
|
|
- printk(KERN_ERR "NFS: server %s error: fileid changed\n"
|
|
|
- "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
|
|
|
- NFS_SERVER(inode)->nfs_client->cl_hostname, inode->i_sb->s_id,
|
|
|
- (long long)nfsi->fileid, (long long)fattr->fileid);
|
|
|
- goto out_err;
|
|
|
}
|
|
|
|
|
|
|