diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-01-11 12:32:26 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-01-12 15:51:18 -0500 |
commit | c733c49c32624f927f443be6dbabb387006bbe42 (patch) | |
tree | 83c9a32ce32d2b9b67b1a80b1efa57e9cfc95863 /fs | |
parent | 2dfc61736482441993bfb7dfaa971113b53f107c (diff) | |
download | linux-c733c49c32624f927f443be6dbabb387006bbe42.tar.gz linux-c733c49c32624f927f443be6dbabb387006bbe42.tar.bz2 linux-c733c49c32624f927f443be6dbabb387006bbe42.zip |
NFSv4: Don't apply change_info4 twice on rename within a directory
If a file is renamed, but stays in the same directory, we will still receive
2 change_info4 structures describing the change to that directory, but we
only want to apply it once.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/nfs4proc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 4010c33151ad..1e797bf74aaf 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -4159,8 +4159,11 @@ static int nfs4_proc_rename_done(struct rpc_task *task, struct inode *old_dir, if (nfs4_async_handle_error(task, res->server, NULL, &data->timeout) == -EAGAIN) return 0; - update_changeattr(old_dir, &res->old_cinfo); - update_changeattr(new_dir, &res->new_cinfo); + if (task->tk_status == 0) { + update_changeattr(old_dir, &res->old_cinfo); + if (new_dir != old_dir) + update_changeattr(new_dir, &res->new_cinfo); + } return 1; } |