Lines Matching refs:mnt

32 static struct mount *get_peer_under_root(struct mount *mnt,  in get_peer_under_root()  argument
36 struct mount *m = mnt; in get_peer_under_root()
40 if (m->mnt_ns == ns && is_path_reachable(m, m->mnt.mnt_root, root)) in get_peer_under_root()
44 } while (m != mnt); in get_peer_under_root()
55 int get_dominating_id(struct mount *mnt, const struct path *root) in get_dominating_id() argument
59 for (m = mnt->mnt_master; m != NULL; m = m->mnt_master) { in get_dominating_id()
60 struct mount *d = get_peer_under_root(m, mnt->mnt_ns, root); in get_dominating_id()
68 static int do_make_slave(struct mount *mnt) in do_make_slave() argument
70 struct mount *peer_mnt = mnt, *master = mnt->mnt_master; in do_make_slave()
78 while ((peer_mnt = next_peer(peer_mnt)) != mnt && in do_make_slave()
79 peer_mnt->mnt.mnt_root != mnt->mnt.mnt_root) ; in do_make_slave()
81 if (peer_mnt == mnt) { in do_make_slave()
82 peer_mnt = next_peer(mnt); in do_make_slave()
83 if (peer_mnt == mnt) in do_make_slave()
86 if (mnt->mnt_group_id && IS_MNT_SHARED(mnt) && in do_make_slave()
87 list_empty(&mnt->mnt_share)) in do_make_slave()
88 mnt_release_group_id(mnt); in do_make_slave()
90 list_del_init(&mnt->mnt_share); in do_make_slave()
91 mnt->mnt_group_id = 0; in do_make_slave()
97 list_for_each_entry(slave_mnt, &mnt->mnt_slave_list, mnt_slave) in do_make_slave()
99 list_move(&mnt->mnt_slave, &master->mnt_slave_list); in do_make_slave()
100 list_splice(&mnt->mnt_slave_list, master->mnt_slave_list.prev); in do_make_slave()
101 INIT_LIST_HEAD(&mnt->mnt_slave_list); in do_make_slave()
103 struct list_head *p = &mnt->mnt_slave_list; in do_make_slave()
111 mnt->mnt_master = master; in do_make_slave()
112 CLEAR_MNT_SHARED(mnt); in do_make_slave()
119 void change_mnt_propagation(struct mount *mnt, int type) in change_mnt_propagation() argument
122 set_mnt_shared(mnt); in change_mnt_propagation()
125 do_make_slave(mnt); in change_mnt_propagation()
127 list_del_init(&mnt->mnt_slave); in change_mnt_propagation()
128 mnt->mnt_master = NULL; in change_mnt_propagation()
130 mnt->mnt.mnt_flags |= MNT_UNBINDABLE; in change_mnt_propagation()
132 mnt->mnt.mnt_flags &= ~MNT_UNBINDABLE; in change_mnt_propagation()
218 if (!is_subdir(mp->m_dentry, m->mnt.mnt_root)) in propagate_one()
249 child = copy_tree(last_source, last_source->mnt.mnt_root, type); in propagate_one()
252 child->mnt.mnt_flags &= ~MNT_LOCKED; in propagate_one()
330 static inline int do_refcount_check(struct mount *mnt, int count) in do_refcount_check() argument
332 return mnt_get_count(mnt) > count; in do_refcount_check()
345 int propagate_mount_busy(struct mount *mnt, int refcnt) in propagate_mount_busy() argument
348 struct mount *parent = mnt->mnt_parent; in propagate_mount_busy()
351 if (mnt == parent) in propagate_mount_busy()
352 return do_refcount_check(mnt, refcnt); in propagate_mount_busy()
359 if (!list_empty(&mnt->mnt_mounts) || do_refcount_check(mnt, refcnt)) in propagate_mount_busy()
364 child = __lookup_mnt_last(&m->mnt, mnt->mnt_mountpoint); in propagate_mount_busy()
377 void propagate_mount_unlock(struct mount *mnt) in propagate_mount_unlock() argument
379 struct mount *parent = mnt->mnt_parent; in propagate_mount_unlock()
382 BUG_ON(parent == mnt); in propagate_mount_unlock()
386 child = __lookup_mnt_last(&m->mnt, mnt->mnt_mountpoint); in propagate_mount_unlock()
388 child->mnt.mnt_flags &= ~MNT_LOCKED; in propagate_mount_unlock()
395 static void mark_umount_candidates(struct mount *mnt) in mark_umount_candidates() argument
397 struct mount *parent = mnt->mnt_parent; in mark_umount_candidates()
400 BUG_ON(parent == mnt); in mark_umount_candidates()
404 struct mount *child = __lookup_mnt_last(&m->mnt, in mark_umount_candidates()
405 mnt->mnt_mountpoint); in mark_umount_candidates()
416 static void __propagate_umount(struct mount *mnt) in __propagate_umount() argument
418 struct mount *parent = mnt->mnt_parent; in __propagate_umount()
421 BUG_ON(parent == mnt); in __propagate_umount()
426 struct mount *child = __lookup_mnt_last(&m->mnt, in __propagate_umount()
427 mnt->mnt_mountpoint); in __propagate_umount()
437 child->mnt.mnt_flags |= MNT_UMOUNT; in __propagate_umount()
438 list_move_tail(&child->mnt_list, &mnt->mnt_list); in __propagate_umount()
452 struct mount *mnt; in propagate_umount() local
454 list_for_each_entry_reverse(mnt, list, mnt_list) in propagate_umount()
455 mark_umount_candidates(mnt); in propagate_umount()
457 list_for_each_entry(mnt, list, mnt_list) in propagate_umount()
458 __propagate_umount(mnt); in propagate_umount()