diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-11-29 14:50:17 +0000 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-11-29 14:50:17 +0000 |
commit | 98014be39bda8277a5ad130bb274ed6eb18b74df (patch) | |
tree | 974620a47c9350ff9b3c06ffd2b49470bbda72ab /fs/nfs/super.c | |
parent | 55135dfbf3dd83cb3e98deed8271b62d188404e1 (diff) | |
parent | 6e2a587eb99267367409097b70cb2d61b09e5269 (diff) |
Merge branch 'defconfigs-for-arnd' of git://git.linaro.org/people/triad/linux-stericsson into fixes
Diffstat (limited to 'fs/nfs/super.c')
-rw-r--r-- | fs/nfs/super.c | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 480b3b6bf71..134777406ee 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -2787,43 +2787,18 @@ static void nfs_referral_loop_unprotect(void) static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt, const char *export_path) { - struct mnt_namespace *ns_private; - struct super_block *s; struct dentry *dentry; - struct path path; - int ret; - - ns_private = create_mnt_ns(root_mnt); - ret = PTR_ERR(ns_private); - if (IS_ERR(ns_private)) - goto out_mntput; - - ret = nfs_referral_loop_protect(); - if (ret != 0) - goto out_put_mnt_ns; + int ret = nfs_referral_loop_protect(); - ret = vfs_path_lookup(root_mnt->mnt_root, root_mnt, - export_path, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &path); + if (ret) { + mntput(root_mnt); + return ERR_PTR(ret); + } + dentry = mount_subtree(root_mnt, export_path); nfs_referral_loop_unprotect(); - put_mnt_ns(ns_private); - - if (ret != 0) - goto out_err; - - s = path.mnt->mnt_sb; - atomic_inc(&s->s_active); - dentry = dget(path.dentry); - path_put(&path); - down_write(&s->s_umount); return dentry; -out_put_mnt_ns: - put_mnt_ns(ns_private); -out_mntput: - mntput(root_mnt); -out_err: - return ERR_PTR(ret); } static struct dentry *nfs4_try_mount(int flags, const char *dev_name, |