aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2011-01-17 01:35:23 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2011-01-17 01:35:23 -0500
commit19a167af7c97248ec646552ebc9140bc6aa3552a (patch)
treea521153c80fa6e40b2b4983c5bba21c2e96d1864 /fs/namei.c
parente78bf5e6cbe837daa6ab628a5f679548742994d3 (diff)
Take the completion of automount into new helper
... and shift it from namei.c to namespace.c Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c31
1 files changed, 5 insertions, 26 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 8f7b41a14882..b753192d8c3f 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -923,37 +923,13 @@ static int follow_automount(struct path *path, unsigned flags,
923 if (!mnt) /* mount collision */ 923 if (!mnt) /* mount collision */
924 return 0; 924 return 0;
925 925
926 /* The new mount record should have at least 2 refs to prevent it being 926 err = finish_automount(mnt, path);
927 * expired before we get a chance to add it
928 */
929 BUG_ON(mnt_get_count(mnt) < 2);
930
931 if (mnt->mnt_sb == path->mnt->mnt_sb &&
932 mnt->mnt_root == path->dentry) {
933 mnt_clear_expiry(mnt);
934 mntput(mnt);
935 mntput(mnt);
936 return -ELOOP;
937 }
938 927
939 /* We need to add the mountpoint to the parent. The filesystem may
940 * have placed it on an expiry list, and so we need to make sure it
941 * won't be expired under us if do_add_mount() fails (do_add_mount()
942 * will eat a reference unconditionally).
943 */
944 mntget(mnt);
945 err = do_add_mount(mnt, path, path->mnt->mnt_flags | MNT_SHRINKABLE);
946 switch (err) { 928 switch (err) {
947 case -EBUSY: 929 case -EBUSY:
948 /* Someone else made a mount here whilst we were busy */ 930 /* Someone else made a mount here whilst we were busy */
949 err = 0; 931 return 0;
950 default:
951 mnt_clear_expiry(mnt);
952 mntput(mnt);
953 mntput(mnt);
954 return err;
955 case 0: 932 case 0:
956 mntput(mnt);
957 dput(path->dentry); 933 dput(path->dentry);
958 if (*need_mntput) 934 if (*need_mntput)
959 mntput(path->mnt); 935 mntput(path->mnt);
@@ -961,7 +937,10 @@ static int follow_automount(struct path *path, unsigned flags,
961 path->dentry = dget(mnt->mnt_root); 937 path->dentry = dget(mnt->mnt_root);
962 *need_mntput = true; 938 *need_mntput = true;
963 return 0; 939 return 0;
940 default:
941 return err;
964 } 942 }
943
965} 944}
966 945
967/* 946/*