Lines Matching full:mount
30 #include <uapi/linux/mount.h>
37 /* Maximum number of mounts in a mount namespace */
105 static int mnt_alloc_id(struct mount *mnt) in mnt_alloc_id()
115 static void mnt_free_id(struct mount *mnt) in mnt_free_id()
123 static int mnt_alloc_group_id(struct mount *mnt) in mnt_alloc_group_id()
136 void mnt_release_group_id(struct mount *mnt) in mnt_release_group_id()
145 static inline void mnt_add_count(struct mount *mnt, int n) in mnt_add_count()
159 int mnt_get_count(struct mount *mnt) in mnt_get_count()
175 static struct mount *alloc_vfsmnt(const char *name) in alloc_vfsmnt()
177 struct mount *mnt = kmem_cache_zalloc(mnt_cache, GFP_KERNEL); in alloc_vfsmnt()
236 * __mnt_is_readonly: check whether a mount is read-only
237 * @mnt: the mount to check for its write status
252 static inline void mnt_inc_writers(struct mount *mnt) in mnt_inc_writers()
261 static inline void mnt_dec_writers(struct mount *mnt) in mnt_dec_writers()
270 static unsigned int mnt_get_writers(struct mount *mnt) in mnt_get_writers()
302 * __mnt_want_write - get write access to a mount without freeze protection
303 * @m: the mount on which to take a write
313 struct mount *mnt = real_mount(m); in __mnt_want_write()
342 * mnt_want_write - get write access to a mount
343 * @m: the mount on which to take a write
346 * it, and makes sure that writes are allowed (mount is read-write, filesystem
363 * mnt_clone_write - get write access to a mount
364 * @mnt: the mount on which to take a write
387 * __mnt_want_write_file - get write access to a file's mount
388 * @file: the file who's mount on which to take a write
402 * mnt_want_write_file - get write access to a file's mount
403 * @file: the file who's mount on which to take a write
421 * __mnt_drop_write - give up write access to a mount
422 * @mnt: the mount on which to give up write access
436 * mnt_drop_write - give up write access to a mount
437 * @mnt: the mount on which to give up write access
462 static int mnt_make_readonly(struct mount *mnt) in mnt_make_readonly()
504 static int __mnt_unmake_readonly(struct mount *mnt) in __mnt_unmake_readonly()
514 struct mount *mnt; in sb_prepare_remount_readonly()
548 static void free_vfsmnt(struct mount *mnt) in free_vfsmnt()
559 free_vfsmnt(container_of(head, struct mount, mnt_rcu)); in delayed_free_vfsmnt()
565 struct mount *mnt; in __legitimize_mnt()
605 * find the first mount at @dentry on vfsmount @mnt.
608 struct mount *__lookup_mnt(struct vfsmount *mnt, struct dentry *dentry) in __lookup_mnt()
611 struct mount *p; in __lookup_mnt()
620 * lookup_mnt - Return the first child mount mounted at path
625 * mount /dev/sda1 /mnt
626 * mount /dev/sda2 /mnt
627 * mount /dev/sda3 /mnt
629 * Then lookup_mnt() on the base /mnt dentry in the root mount will
637 struct mount *child_mnt; in lookup_mnt()
661 static inline bool mnt_is_cursor(struct mount *mnt) in mnt_is_cursor()
668 * current mount namespace.
673 * mounts in the current mount namespace and test to see if the dentry
677 * need to identify all mounts that may be in the current mount
678 * namespace not just a mount that happens to have some specified
679 * parent mount.
684 struct mount *mnt; in __is_local_mountpoint()
790 static inline int check_mnt(struct mount *mnt) in check_mnt()
820 static struct mountpoint *unhash_mnt(struct mount *mnt) in unhash_mnt()
836 static void umount_mnt(struct mount *mnt) in umount_mnt()
844 void mnt_set_mountpoint(struct mount *mnt, in mnt_set_mountpoint()
846 struct mount *child_mnt) in mnt_set_mountpoint()
856 static void __attach_mnt(struct mount *mnt, struct mount *parent) in __attach_mnt()
866 static void attach_mnt(struct mount *mnt, in attach_mnt()
867 struct mount *parent, in attach_mnt()
874 void mnt_change_mountpoint(struct mount *parent, struct mountpoint *mp, struct mount *mnt) in mnt_change_mountpoint()
877 struct mount *old_parent = mnt->mnt_parent; in mnt_change_mountpoint()
892 static void commit_tree(struct mount *mnt) in commit_tree()
894 struct mount *parent = mnt->mnt_parent; in commit_tree()
895 struct mount *m; in commit_tree()
914 static struct mount *next_mnt(struct mount *p, struct mount *root) in next_mnt()
927 return list_entry(next, struct mount, mnt_child); in next_mnt()
930 static struct mount *skip_mnt_tree(struct mount *p) in skip_mnt_tree()
934 p = list_entry(prev, struct mount, mnt_child); in skip_mnt_tree()
941 * vfs_create_mount - Create a mount for a configured superblock
944 * Create a mount to an already configured superblock. If necessary, the
947 * Note that this does not attach the mount to anything.
951 struct mount *mnt; in vfs_create_mount()
1022 * through from the parent mount to the submount don't support in vfs_submount()
1032 static struct mount *clone_mnt(struct mount *old, struct dentry *root, in clone_mnt()
1036 struct mount *mnt; in clone_mnt()
1083 /* stick the duplicate mount on the same expiry list in clone_mnt()
1098 static void cleanup_mnt(struct mount *mnt) in cleanup_mnt()
1101 struct mount *m; in cleanup_mnt()
1125 cleanup_mnt(container_of(head, struct mount, mnt_rcu)); in __cleanup_mnt()
1132 struct mount *m, *t; in delayed_mntput()
1139 static void mntput_no_expire(struct mount *mnt) in mntput_no_expire()
1184 struct mount *p, *tmp; in mntput_no_expire()
1210 struct mount *m = real_mount(mnt); in mntput()
1227 /* path_is_mountpoint() - Check if path is a mount in the current
1258 struct mount *p; in mnt_clone_internal()
1267 static struct mount *mnt_list_next(struct mnt_namespace *ns, in mnt_list_next()
1270 struct mount *mnt, *ret = NULL; in mnt_list_next()
1308 struct mount *mnt = v; in m_next()
1317 struct mount *mnt = v; in m_stop()
1331 struct mount *r = v; in m_show()
1342 void mnt_cursor_del(struct mnt_namespace *ns, struct mount *cursor) in mnt_cursor_del()
1353 * may_umount_tree - check if a mount tree is busy
1354 * @mnt: root of mount tree
1362 struct mount *mnt = real_mount(m); in may_umount_tree()
1365 struct mount *p; in may_umount_tree()
1385 * may_umount - check if a mount point is busy
1386 * @mnt: root of mount
1388 * This is called to check if a mount point has any
1390 * mount has sub mounts this will return busy
1415 struct mount *m; in namespace_unlock()
1447 static bool disconnect_mount(struct mount *mnt, enum umount_tree_flags how) in disconnect_mount()
1453 /* A mount without a parent has nothing to be connected to */ in disconnect_mount()
1464 /* Has it been requested that the mount remain connected? */ in disconnect_mount()
1468 /* Is the mount locked such that it needs to remain connected? */ in disconnect_mount()
1472 /* By default disconnect the mount */ in disconnect_mount()
1480 static void umount_tree(struct mount *mnt, enum umount_tree_flags how) in umount_tree()
1483 struct mount *p; in umount_tree()
1506 p = list_first_entry(&tmp_list, struct mount, mnt_list); in umount_tree()
1534 static void shrink_submounts(struct mount *mnt);
1559 static int do_umount(struct mount *mnt, int flags) in do_umount()
1596 * mount, and they will themselves hold resources we must in do_umount()
1600 * must return, and the like. Thats for the mount program to worry in do_umount()
1659 * to an existing mountpoint, and wind up leaking the mount.
1668 struct mount *mnt; in __detach_mounts()
1678 mnt = hlist_entry(mp->m_list.first, struct mount, mnt_mp_list); in __detach_mounts()
1703 "WARNING: the mand mount option is being deprecated and\n" in may_mandlock()
1711 pr_warn("VFS: \"mand\" mount option not supported"); in may_mandlock()
1718 struct mount *mnt = real_mount(path->mnt); in can_umount()
1736 struct mount *mnt = real_mount(path->mnt); in path_umount()
1786 /* Is this a proxy for a mount namespace? */ in is_mnt_ns_file()
1803 /* Could bind mounting the mount namespace inode cause a in mnt_ns_loop()
1804 * mount namespace loop? in mnt_ns_loop()
1814 struct mount *copy_tree(struct mount *mnt, struct dentry *dentry, in copy_tree()
1817 struct mount *res, *p, *q, *r, *parent; in copy_tree()
1833 struct mount *s; in copy_tree()
1883 struct mount *tree; in collect_mounts()
1926 static bool has_locked_children(struct mount *mnt, struct dentry *dentry) in has_locked_children()
1928 struct mount *child; in has_locked_children()
1945 * to the originating mount won't be propagated into this).
1951 struct mount *old_mnt = real_mount(path->mnt); in clone_private_mount()
1952 struct mount *new_mnt; in clone_private_mount()
1970 /* Longterm mount to be removed by kern_unmount*() */ in clone_private_mount()
1984 struct mount *mnt; in iterate_mounts()
1996 static void lock_mnt_tree(struct mount *mnt) in lock_mnt_tree()
1998 struct mount *p; in lock_mnt_tree()
2002 /* Don't allow unprivileged users to change mount flags */ in lock_mnt_tree()
2016 /* Don't allow unprivileged users to reveal what is under a mount */ in lock_mnt_tree()
2023 static void cleanup_group_ids(struct mount *mnt, struct mount *end) in cleanup_group_ids()
2025 struct mount *p; in cleanup_group_ids()
2033 static int invent_group_ids(struct mount *mnt, bool recurse) in invent_group_ids()
2035 struct mount *p; in invent_group_ids()
2050 int count_mounts(struct mnt_namespace *ns, struct mount *mnt) in count_mounts()
2054 struct mount *p; in count_mounts()
2073 * @source_mnt : mount tree to be attached
2074 * @nd : place the mount tree @source_mnt is attached
2076 * store the parent mount and mountpoint dentry.
2079 * NOTE: in the table below explains the semantics when a source mount
2080 * of a given type is attached to a destination mount of a given type.
2082 * | BIND MOUNT OPERATION |
2093 * A bind operation clones the source mount and mounts the clone on the
2094 * destination mount.
2096 * (++) the cloned mount is propagated to all the mounts in the propagation
2097 * tree of the destination mount and the cloned mount is added to
2098 * the peer group of the source mount.
2099 * (+) the cloned mount is created under the destination mount and is marked
2100 * as shared. The cloned mount is added to the peer group of the source
2101 * mount.
2102 * (+++) the mount is propagated to all the mounts in the propagation tree
2103 * of the destination mount and the cloned mount is made slave
2104 * of the same master as that of the source mount. The cloned mount
2106 * (*) the cloned mount is made a slave of the same master as that of the
2107 * source mount.
2110 * | MOVE MOUNT OPERATION |
2122 * (+) the mount is moved to the destination. And is then propagated to
2123 * all the mounts in the propagation tree of the destination mount.
2124 * (+*) the mount is moved to the destination.
2125 * (+++) the mount is moved to the destination and is then propagated to
2126 * all the mounts belonging to the destination mount's propagation tree.
2127 * the mount is marked as 'shared and slave'.
2128 * (*) the mount continues to be a slave at the new location.
2130 * if the source mount is a tree, the operations explained above is
2131 * applied to each mount in the tree.
2135 static int attach_recursive_mnt(struct mount *source_mnt, in attach_recursive_mnt()
2136 struct mount *dest_mnt, in attach_recursive_mnt()
2144 struct mount *child, *p; in attach_recursive_mnt()
2155 /* Is there space to add these mounts to the mount namespace? */ in attach_recursive_mnt()
2189 struct mount *q; in attach_recursive_mnt()
2208 child = hlist_entry(tree_list.first, struct mount, mnt_hash); in attach_recursive_mnt()
2265 static int graft_tree(struct mount *mnt, struct mount *p, struct mountpoint *mp) in graft_tree()
2299 struct mount *m; in do_change_type()
2300 struct mount *mnt = real_mount(path->mnt); in do_change_type()
2329 static struct mount *__do_loopback(struct path *old_path, int recurse) in __do_loopback()
2331 struct mount *mnt = ERR_PTR(-EINVAL), *old = real_mount(old_path->mnt); in __do_loopback()
2354 * do loopback mount.
2360 struct mount *mnt = NULL, *parent; in do_loopback()
2406 struct mount *mnt, *p; in open_detached_copy()
2493 * Don't allow locked mount flags to be cleared.
2498 static bool can_change_locked_flags(struct mount *mnt, unsigned int mnt_flags) in can_change_locked_flags()
2525 static int change_mount_ro_state(struct mount *mnt, unsigned int mnt_flags) in change_mount_ro_state()
2539 * Update the user-settable attributes on a mount. The caller must hold
2542 static void set_mount_attributes(struct mount *mnt, unsigned int mnt_flags) in set_mount_attributes()
2576 * to mount(2).
2581 struct mount *mnt = real_mount(path->mnt); in do_reconfigure_mnt()
2614 struct mount *mnt = real_mount(path->mnt); in do_remount()
2649 static inline int tree_contains_unbindable(struct mount *mnt) in tree_contains_unbindable()
2651 struct mount *p; in tree_contains_unbindable()
2660 * Check that there aren't references to earlier/same mount namespaces in the
2661 * specified subtree. Such references can act as pins for mount namespaces
2662 * that aren't checked by the mount-cycle checking code, thereby allowing
2665 static bool check_for_nsfs_mounts(struct mount *subtree) in check_for_nsfs_mounts()
2667 struct mount *p; in check_for_nsfs_mounts()
2684 struct mount *p; in do_move_mount()
2685 struct mount *old; in do_move_mount()
2686 struct mount *parent; in do_move_mount()
2725 * Don't move a mount residing in a shared parent. in do_move_mount()
2730 * Don't move a mount tree containing unbindable mounts to a destination in do_move_mount()
2731 * mount which is shared. in do_move_mount()
2747 /* if the mount is moved, it should no longer be expire in do_move_mount()
2781 * add a mount into a namespace's mount tree
2783 static int do_add_mount(struct mount *newmnt, struct mountpoint *mp, in do_add_mount()
2786 struct mount *parent = real_mount(path->mnt); in do_add_mount()
2799 /* Refuse the same filesystem on the same mount point */ in do_add_mount()
2814 * Create a new mount using a superblock configuration and request it
2855 * create a new mount for userspace and request it to be added into the
2911 struct mount *mnt; in finish_automount()
2920 /* The new mount record should have at least 2 refs to prevent it being in finish_automount()
2934 * got", not "try to mount it on top". in finish_automount()
2978 * mnt_set_expiry - Put a mount on an expiration list
2979 * @mnt: The mount to list.
2980 * @expiry_list: The list to add the mount to.
2999 struct mount *mnt, *next; in mark_mounts_for_expiry()
3021 mnt = list_first_entry(&graveyard, struct mount, mnt_expire); in mark_mounts_for_expiry()
3037 static int select_submounts(struct mount *parent, struct list_head *graveyard) in select_submounts()
3039 struct mount *this_parent = parent; in select_submounts()
3048 struct mount *mnt = list_entry(tmp, struct mount, mnt_child); in select_submounts()
3083 static void shrink_submounts(struct mount *mnt) in shrink_submounts()
3086 struct mount *m; in shrink_submounts()
3091 m = list_first_entry(&graveyard, struct mount, in shrink_submounts()
3142 * be given to the mount() call (ie: read-only, no-dev, no-suid etc).
3148 * Pre-0.97 versions of mount() didn't have a flags word.
3268 * mount a reference to an older mount namespace into the current
3269 * mount namespace, preventing reference counting loops. A 64bit
3316 struct mount *p, *q; in copy_mnt_ns()
3317 struct mount *old; in copy_mnt_ns()
3318 struct mount *new; in copy_mnt_ns()
3392 struct mount *mnt = real_mount(m); in mount_subtree()
3427 SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, in SYSCALL_DEFINE5() argument
3462 * Create a kernel mount representation for a new, prepared superblock
3472 struct mount *mnt; in SYSCALL_DEFINE3()
3529 /* There must be a valid superblock or we can't mount it */ in SYSCALL_DEFINE3()
3536 pr_warn("VFS: Mount too revealing\n"); in SYSCALL_DEFINE3()
3556 /* We've done the mount bit - now move the file context into more or in SYSCALL_DEFINE3()
3602 * Move a mount from one place to another. In combination with
3603 * fsopen()/fsmount() this is used to install a new mount and in combination
3605 * a mount subtree.
3664 bool is_path_reachable(struct mount *mnt, struct dentry *dentry, in is_path_reachable()
3705 * /nfs/my_root where /nfs is the mount point. It must be a mountpoint,
3706 * though, so you may need to say mount --bind /nfs/my_root /nfs/my_root
3713 struct mount *new_mnt, *root_mnt, *old_mnt, *root_parent, *ex_parent; in SYSCALL_DEFINE2()
3782 /* mount old root on put_old */ in SYSCALL_DEFINE2()
3784 /* mount new_root on / */ in SYSCALL_DEFINE2()
3788 /* A moved mount should not expire automatically */ in SYSCALL_DEFINE2()
3811 struct mount *m; in init_mount_tree()
3842 mnt_cache = kmem_cache_create("mnt_cache", sizeof(struct mount), in mnt_init()
3845 mount_hashtable = alloc_large_system_hash("Mount-cache", in mnt_init()
3857 panic("Failed to allocate mount hash table\n"); in mnt_init()
3887 * it is a longterm mount, don't release mnt until in kern_mount()
3898 /* release long term mount so mount point can be released */ in kern_unmount()
3954 struct mount *mnt; in mnt_already_visible()
3960 struct mount *child; in mnt_already_visible()
3969 /* This mount is not fully visible if it's root directory in mnt_already_visible()
3975 /* A local view of the mount flags */ in mnt_already_visible()
3982 /* Verify the mount flags are equal to or more permissive in mnt_already_visible()
3983 * than the proposed new mount. in mnt_already_visible()
3992 /* This mount is not fully visible if there are any in mnt_already_visible()