| From b1e4adf4ea41bb8b5a7bfc1a7001f137e65495df Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Date: Thu, 19 Mar 2009 15:35:49 -0400 |
| Subject: NFS: Fix the notifications when renaming onto an existing file |
| |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| |
| commit b1e4adf4ea41bb8b5a7bfc1a7001f137e65495df upstream. |
| |
| NFS appears to be returning an unnecessary "delete" notification when |
| we're doing an atomic rename. See |
| |
| http://bugzilla.gnome.org/show_bug.cgi?id=575684 |
| |
| The fix is to get rid of the redundant call to d_delete(). |
| |
| Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/nfs/dir.c | 9 ++++----- |
| 1 file changed, 4 insertions(+), 5 deletions(-) |
| |
| --- a/fs/nfs/dir.c |
| +++ b/fs/nfs/dir.c |
| @@ -1624,8 +1624,7 @@ static int nfs_rename(struct inode *old_ |
| } else if (atomic_read(&new_dentry->d_count) > 1) |
| /* dentry still busy? */ |
| goto out; |
| - } else |
| - nfs_drop_nlink(new_inode); |
| + } |
| |
| go_ahead: |
| /* |
| @@ -1638,10 +1637,8 @@ go_ahead: |
| } |
| nfs_inode_return_delegation(old_inode); |
| |
| - if (new_inode != NULL) { |
| + if (new_inode != NULL) |
| nfs_inode_return_delegation(new_inode); |
| - d_delete(new_dentry); |
| - } |
| |
| error = NFS_PROTO(old_dir)->rename(old_dir, &old_dentry->d_name, |
| new_dir, &new_dentry->d_name); |
| @@ -1650,6 +1647,8 @@ out: |
| if (rehash) |
| d_rehash(rehash); |
| if (!error) { |
| + if (new_inode != NULL) |
| + nfs_drop_nlink(new_inode); |
| d_move(old_dentry, new_dentry); |
| nfs_set_verifier(new_dentry, |
| nfs_save_change_attribute(new_dir)); |