diff options
| -rw-r--r-- | fs/afs/dir.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/afs/dir.c b/fs/afs/dir.c index ab618d32554c..bb89876fbb8e 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c | |||
| @@ -765,6 +765,8 @@ static void afs_vnode_new_inode(struct afs_fs_cursor *fc, | |||
| 765 | if (fc->ac.error < 0) | 765 | if (fc->ac.error < 0) |
| 766 | return; | 766 | return; |
| 767 | 767 | ||
| 768 | d_drop(new_dentry); | ||
| 769 | |||
| 768 | inode = afs_iget(fc->vnode->vfs_inode.i_sb, fc->key, | 770 | inode = afs_iget(fc->vnode->vfs_inode.i_sb, fc->key, |
| 769 | newfid, newstatus, newcb, fc->cbi); | 771 | newfid, newstatus, newcb, fc->cbi); |
| 770 | if (IS_ERR(inode)) { | 772 | if (IS_ERR(inode)) { |
| @@ -775,9 +777,7 @@ static void afs_vnode_new_inode(struct afs_fs_cursor *fc, | |||
| 775 | return; | 777 | return; |
| 776 | } | 778 | } |
| 777 | 779 | ||
| 778 | d_instantiate(new_dentry, inode); | 780 | d_add(new_dentry, inode); |
| 779 | if (d_unhashed(new_dentry)) | ||
| 780 | d_rehash(new_dentry); | ||
| 781 | } | 781 | } |
| 782 | 782 | ||
| 783 | /* | 783 | /* |
| @@ -1053,7 +1053,7 @@ static int afs_link(struct dentry *from, struct inode *dir, | |||
| 1053 | if (afs_begin_vnode_operation(&fc, dvnode, key)) { | 1053 | if (afs_begin_vnode_operation(&fc, dvnode, key)) { |
| 1054 | if (mutex_lock_interruptible_nested(&vnode->io_lock, 1) < 0) { | 1054 | if (mutex_lock_interruptible_nested(&vnode->io_lock, 1) < 0) { |
| 1055 | afs_end_vnode_operation(&fc); | 1055 | afs_end_vnode_operation(&fc); |
| 1056 | return -ERESTARTSYS; | 1056 | goto error_key; |
| 1057 | } | 1057 | } |
| 1058 | 1058 | ||
| 1059 | while (afs_select_fileserver(&fc)) { | 1059 | while (afs_select_fileserver(&fc)) { |
| @@ -1180,7 +1180,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 1180 | if (orig_dvnode != new_dvnode) { | 1180 | if (orig_dvnode != new_dvnode) { |
| 1181 | if (mutex_lock_interruptible_nested(&new_dvnode->io_lock, 1) < 0) { | 1181 | if (mutex_lock_interruptible_nested(&new_dvnode->io_lock, 1) < 0) { |
| 1182 | afs_end_vnode_operation(&fc); | 1182 | afs_end_vnode_operation(&fc); |
| 1183 | return -ERESTARTSYS; | 1183 | goto error_key; |
| 1184 | } | 1184 | } |
| 1185 | } | 1185 | } |
| 1186 | while (afs_select_fileserver(&fc)) { | 1186 | while (afs_select_fileserver(&fc)) { |
| @@ -1199,14 +1199,9 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 1199 | goto error_key; | 1199 | goto error_key; |
| 1200 | } | 1200 | } |
| 1201 | 1201 | ||
| 1202 | key_put(key); | ||
| 1203 | _leave(" = 0"); | ||
| 1204 | return 0; | ||
| 1205 | |||
| 1206 | error_key: | 1202 | error_key: |
| 1207 | key_put(key); | 1203 | key_put(key); |
| 1208 | error: | 1204 | error: |
| 1209 | d_drop(new_dentry); | ||
| 1210 | _leave(" = %d", ret); | 1205 | _leave(" = %d", ret); |
| 1211 | return ret; | 1206 | return ret; |
| 1212 | } | 1207 | } |
