NFS: Fix up sillyrename()
Ensure that we register the fact that the inode ctime has changed. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
ed7e9ad090
commit
3cb3fd6da4
1 changed files with 10 additions and 0 deletions
|
@ -448,6 +448,7 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
|
|||
unsigned char silly[SILLYNAME_LEN + 1];
|
||||
unsigned long long fileid;
|
||||
struct dentry *sdentry;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct rpc_task *task;
|
||||
int error = -EBUSY;
|
||||
|
||||
|
@ -485,6 +486,8 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
|
|||
goto out;
|
||||
} while (d_inode(sdentry) != NULL); /* need negative lookup */
|
||||
|
||||
ihold(inode);
|
||||
|
||||
/* queue unlink first. Can't do this from rpc_release as it
|
||||
* has to allocate memory
|
||||
*/
|
||||
|
@ -509,6 +512,12 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
|
|||
case 0:
|
||||
/* The rename succeeded */
|
||||
nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
|
||||
spin_lock(&inode->i_lock);
|
||||
NFS_I(inode)->attr_gencount = nfs_inc_attr_generation_counter();
|
||||
NFS_I(inode)->cache_validity |= NFS_INO_INVALID_CHANGE
|
||||
| NFS_INO_INVALID_CTIME
|
||||
| NFS_INO_REVAL_FORCED;
|
||||
spin_unlock(&inode->i_lock);
|
||||
d_move(dentry, sdentry);
|
||||
break;
|
||||
case -ERESTARTSYS:
|
||||
|
@ -519,6 +528,7 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
|
|||
}
|
||||
rpc_put_task(task);
|
||||
out_dput:
|
||||
iput(inode);
|
||||
dput(sdentry);
|
||||
out:
|
||||
return error;
|
||||
|
|
Loading…
Reference in a new issue