diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2013-09-28 23:10:55 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-10-24 23:34:58 -0400 |
commit | aba809cf0944fdc5a83ef8b5864cdce2a99b2513 (patch) | |
tree | ea958e25bc153d0075933b8258723a3182ad2cec /fs/namespace.c | |
parent | 9559f68915024ece8be3781003f25aef3677e574 (diff) |
namespace.c: get rid of mnt_ghosts
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index c8d214ce30c6..846ea43ab0c6 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -1136,20 +1136,8 @@ static void namespace_unlock(void) | |||
1136 | while (!list_empty(&head)) { | 1136 | while (!list_empty(&head)) { |
1137 | mnt = list_first_entry(&head, struct mount, mnt_hash); | 1137 | mnt = list_first_entry(&head, struct mount, mnt_hash); |
1138 | list_del_init(&mnt->mnt_hash); | 1138 | list_del_init(&mnt->mnt_hash); |
1139 | if (mnt_has_parent(mnt)) { | 1139 | if (mnt->mnt_ex_mountpoint.mnt) |
1140 | struct dentry *dentry; | 1140 | path_put(&mnt->mnt_ex_mountpoint); |
1141 | struct mount *m; | ||
1142 | |||
1143 | br_write_lock(&vfsmount_lock); | ||
1144 | dentry = mnt->mnt_mountpoint; | ||
1145 | m = mnt->mnt_parent; | ||
1146 | mnt->mnt_mountpoint = mnt->mnt.mnt_root; | ||
1147 | mnt->mnt_parent = mnt; | ||
1148 | m->mnt_ghosts--; | ||
1149 | br_write_unlock(&vfsmount_lock); | ||
1150 | dput(dentry); | ||
1151 | mntput(&m->mnt); | ||
1152 | } | ||
1153 | mntput(&mnt->mnt); | 1141 | mntput(&mnt->mnt); |
1154 | } | 1142 | } |
1155 | } | 1143 | } |
@@ -1181,8 +1169,12 @@ void umount_tree(struct mount *mnt, int propagate) | |||
1181 | p->mnt_ns = NULL; | 1169 | p->mnt_ns = NULL; |
1182 | list_del_init(&p->mnt_child); | 1170 | list_del_init(&p->mnt_child); |
1183 | if (mnt_has_parent(p)) { | 1171 | if (mnt_has_parent(p)) { |
1184 | p->mnt_parent->mnt_ghosts++; | ||
1185 | put_mountpoint(p->mnt_mp); | 1172 | put_mountpoint(p->mnt_mp); |
1173 | /* move the reference to mountpoint into ->mnt_ex_mountpoint */ | ||
1174 | p->mnt_ex_mountpoint.dentry = p->mnt_mountpoint; | ||
1175 | p->mnt_ex_mountpoint.mnt = &p->mnt_parent->mnt; | ||
1176 | p->mnt_mountpoint = p->mnt.mnt_root; | ||
1177 | p->mnt_parent = p; | ||
1186 | p->mnt_mp = NULL; | 1178 | p->mnt_mp = NULL; |
1187 | } | 1179 | } |
1188 | change_mnt_propagation(p, MS_PRIVATE); | 1180 | change_mnt_propagation(p, MS_PRIVATE); |