diff options
| -rw-r--r-- | fs/nfs/dir.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 672368f865c..3b2f6973e7c 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
| @@ -1624,8 +1624,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 1624 | } else if (atomic_read(&new_dentry->d_count) > 1) | 1624 | } else if (atomic_read(&new_dentry->d_count) > 1) |
| 1625 | /* dentry still busy? */ | 1625 | /* dentry still busy? */ |
| 1626 | goto out; | 1626 | goto out; |
| 1627 | } else | 1627 | } |
| 1628 | nfs_drop_nlink(new_inode); | ||
| 1629 | 1628 | ||
| 1630 | go_ahead: | 1629 | go_ahead: |
| 1631 | /* | 1630 | /* |
| @@ -1638,10 +1637,8 @@ go_ahead: | |||
| 1638 | } | 1637 | } |
| 1639 | nfs_inode_return_delegation(old_inode); | 1638 | nfs_inode_return_delegation(old_inode); |
| 1640 | 1639 | ||
| 1641 | if (new_inode != NULL) { | 1640 | if (new_inode != NULL) |
| 1642 | nfs_inode_return_delegation(new_inode); | 1641 | nfs_inode_return_delegation(new_inode); |
| 1643 | d_delete(new_dentry); | ||
| 1644 | } | ||
| 1645 | 1642 | ||
| 1646 | error = NFS_PROTO(old_dir)->rename(old_dir, &old_dentry->d_name, | 1643 | error = NFS_PROTO(old_dir)->rename(old_dir, &old_dentry->d_name, |
| 1647 | new_dir, &new_dentry->d_name); | 1644 | new_dir, &new_dentry->d_name); |
| @@ -1650,6 +1647,8 @@ out: | |||
| 1650 | if (rehash) | 1647 | if (rehash) |
| 1651 | d_rehash(rehash); | 1648 | d_rehash(rehash); |
| 1652 | if (!error) { | 1649 | if (!error) { |
| 1650 | if (new_inode != NULL) | ||
| 1651 | nfs_drop_nlink(new_inode); | ||
| 1653 | d_move(old_dentry, new_dentry); | 1652 | d_move(old_dentry, new_dentry); |
| 1654 | nfs_set_verifier(new_dentry, | 1653 | nfs_set_verifier(new_dentry, |
| 1655 | nfs_save_change_attribute(new_dir)); | 1654 | nfs_save_change_attribute(new_dir)); |
