Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aba809cf authored by Al Viro's avatar Al Viro
Browse files

namespace.c: get rid of mnt_ghosts



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 9559f689
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ struct mount {
	int mnt_group_id;		/* peer group identifier */
	int mnt_group_id;		/* peer group identifier */
	int mnt_expiry_mark;		/* true if marked for expiry */
	int mnt_expiry_mark;		/* true if marked for expiry */
	int mnt_pinned;
	int mnt_pinned;
	int mnt_ghosts;
	struct path mnt_ex_mountpoint;
};
};


#define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
#define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
+7 −15
Original line number Original line Diff line number Diff line
@@ -1136,20 +1136,8 @@ static void namespace_unlock(void)
	while (!list_empty(&head)) {
	while (!list_empty(&head)) {
		mnt = list_first_entry(&head, struct mount, mnt_hash);
		mnt = list_first_entry(&head, struct mount, mnt_hash);
		list_del_init(&mnt->mnt_hash);
		list_del_init(&mnt->mnt_hash);
		if (mnt_has_parent(mnt)) {
		if (mnt->mnt_ex_mountpoint.mnt)
			struct dentry *dentry;
			path_put(&mnt->mnt_ex_mountpoint);
			struct mount *m;

			br_write_lock(&vfsmount_lock);
			dentry = mnt->mnt_mountpoint;
			m = mnt->mnt_parent;
			mnt->mnt_mountpoint = mnt->mnt.mnt_root;
			mnt->mnt_parent = mnt;
			m->mnt_ghosts--;
			br_write_unlock(&vfsmount_lock);
			dput(dentry);
			mntput(&m->mnt);
		}
		mntput(&mnt->mnt);
		mntput(&mnt->mnt);
	}
	}
}
}
@@ -1181,8 +1169,12 @@ void umount_tree(struct mount *mnt, int propagate)
		p->mnt_ns = NULL;
		p->mnt_ns = NULL;
		list_del_init(&p->mnt_child);
		list_del_init(&p->mnt_child);
		if (mnt_has_parent(p)) {
		if (mnt_has_parent(p)) {
			p->mnt_parent->mnt_ghosts++;
			put_mountpoint(p->mnt_mp);
			put_mountpoint(p->mnt_mp);
			/* move the reference to mountpoint into ->mnt_ex_mountpoint */
			p->mnt_ex_mountpoint.dentry = p->mnt_mountpoint;
			p->mnt_ex_mountpoint.mnt = &p->mnt_parent->mnt;
			p->mnt_mountpoint = p->mnt.mnt_root;
			p->mnt_parent = p;
			p->mnt_mp = NULL;
			p->mnt_mp = NULL;
		}
		}
		change_mnt_propagation(p, MS_PRIVATE);
		change_mnt_propagation(p, MS_PRIVATE);
+1 −2
Original line number Original line Diff line number Diff line
@@ -278,8 +278,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
 */
 */
static inline int do_refcount_check(struct mount *mnt, int count)
static inline int do_refcount_check(struct mount *mnt, int count)
{
{
	int mycount = mnt_get_count(mnt) - mnt->mnt_ghosts;
	return mnt_get_count(mnt) > count;
	return (mycount > count);
}
}


/*
/*