aboutsummaryrefslogtreecommitdiffstats
path: root/fs/exportfs/expfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/exportfs/expfs.c')
-rw-r--r--fs/exportfs/expfs.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c
index c46f1a190b8d..207ba8d627ca 100644
--- a/fs/exportfs/expfs.c
+++ b/fs/exportfs/expfs.c
@@ -143,14 +143,18 @@ static struct dentry *reconnect_one(struct vfsmount *mnt,
143 if (err) 143 if (err)
144 goto out_err; 144 goto out_err;
145 dprintk("%s: found name: %s\n", __func__, nbuf); 145 dprintk("%s: found name: %s\n", __func__, nbuf);
146 inode_lock(parent->d_inode); 146 tmp = lookup_one_len_unlocked(nbuf, parent, strlen(nbuf));
147 tmp = lookup_one_len(nbuf, parent, strlen(nbuf));
148 inode_unlock(parent->d_inode);
149 if (IS_ERR(tmp)) { 147 if (IS_ERR(tmp)) {
150 dprintk("%s: lookup failed: %d\n", __func__, PTR_ERR(tmp)); 148 dprintk("%s: lookup failed: %d\n", __func__, PTR_ERR(tmp));
151 goto out_err; 149 goto out_err;
152 } 150 }
153 if (tmp != dentry) { 151 if (tmp != dentry) {
152 /*
153 * Somebody has renamed it since exportfs_get_name();
154 * great, since it could've only been renamed if it
155 * got looked up and thus connected, and it would
156 * remain connected afterwards. We are done.
157 */
154 dput(tmp); 158 dput(tmp);
155 goto out_reconnected; 159 goto out_reconnected;
156 } 160 }
@@ -308,7 +312,7 @@ static int get_name(const struct path *path, char *name, struct dentry *child)
308 goto out; 312 goto out;
309 313
310 error = -EINVAL; 314 error = -EINVAL;
311 if (!file->f_op->iterate) 315 if (!file->f_op->iterate && !file->f_op->iterate_shared)
312 goto out_close; 316 goto out_close;
313 317
314 buffer.sequence = 0; 318 buffer.sequence = 0;