diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 13:58:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 13:58:42 -0400 |
commit | 4fe70410d9a219dabb47328effccae7e7f2a6e26 (patch) | |
tree | 7f36d6cd27333fa28447f06ce37a6fecceb42955 /fs/nfs/dir.c | |
parent | 395d73413c5656c6d7706ae91dcb441f9b7e3074 (diff) | |
parent | cc85906110e26fe8537c3bdbc08a74ae8110030b (diff) |
Merge branch 'for-linus' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'for-linus' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: (58 commits)
SUNRPC: Ensure IPV6_V6ONLY is set on the socket before binding to a port
NSM: Fix unaligned accesses in nsm_init_private()
NFS: Simplify logic to compare socket addresses in client.c
NFS: Start PF_INET6 callback listener only if IPv6 support is available
lockd: Start PF_INET6 listener only if IPv6 support is available
SUNRPC: Remove CONFIG_SUNRPC_REGISTER_V4
SUNRPC: rpcb_register() should handle errors silently
SUNRPC: Simplify kernel RPC service registration
SUNRPC: Simplify svc_unregister()
SUNRPC: Allow callers to pass rpcb_v4_register a NULL address
SUNRPC: rpcbind actually interprets r_owner string
SUNRPC: Clean up address type casts in rpcb_v4_register()
SUNRPC: Don't return EPROTONOSUPPORT in svc_register()'s helpers
SUNRPC: Use IPv4 loopback for registering AF_INET6 kernel RPC services
SUNRPC: Set IPV6ONLY flag on PF_INET6 RPC listener sockets
NFS: Revert creation of IPv6 listeners for lockd and NFSv4 callbacks
SUNRPC: Remove @family argument from svc_create() and svc_create_pooled()
SUNRPC: Change svc_create_xprt() to take a @family argument
SUNRPC: svc_setup_socket() gets protocol family from socket
SUNRPC: Pass a family argument to svc_register()
...
Diffstat (limited to 'fs/nfs/dir.c')
-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 78bf72fc1db3..370b190a09d1 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)); |