LCOV - code coverage report
Current view: top level - include/linux - mount.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-acha @ Mon Jul 31 20:08:06 PDT 2023 Lines: 1 1 100.0 %
Date: 2023-07-31 20:08:07 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  *
       4             :  * Definitions for mount interface. This describes the in the kernel build 
       5             :  * linkedlist with mounted filesystems.
       6             :  *
       7             :  * Author:  Marco van Wieringen <mvw@planets.elm.net>
       8             :  *
       9             :  */
      10             : #ifndef _LINUX_MOUNT_H
      11             : #define _LINUX_MOUNT_H
      12             : 
      13             : #include <linux/types.h>
      14             : #include <asm/barrier.h>
      15             : 
      16             : struct super_block;
      17             : struct dentry;
      18             : struct user_namespace;
      19             : struct mnt_idmap;
      20             : struct file_system_type;
      21             : struct fs_context;
      22             : struct file;
      23             : struct path;
      24             : 
      25             : #define MNT_NOSUID      0x01
      26             : #define MNT_NODEV       0x02
      27             : #define MNT_NOEXEC      0x04
      28             : #define MNT_NOATIME     0x08
      29             : #define MNT_NODIRATIME  0x10
      30             : #define MNT_RELATIME    0x20
      31             : #define MNT_READONLY    0x40    /* does the user want this to be r/o? */
      32             : #define MNT_NOSYMFOLLOW 0x80
      33             : 
      34             : #define MNT_SHRINKABLE  0x100
      35             : #define MNT_WRITE_HOLD  0x200
      36             : 
      37             : #define MNT_SHARED      0x1000  /* if the vfsmount is a shared mount */
      38             : #define MNT_UNBINDABLE  0x2000  /* if the vfsmount is a unbindable mount */
      39             : /*
      40             :  * MNT_SHARED_MASK is the set of flags that should be cleared when a
      41             :  * mount becomes shared.  Currently, this is only the flag that says a
      42             :  * mount cannot be bind mounted, since this is how we create a mount
      43             :  * that shares events with another mount.  If you add a new MNT_*
      44             :  * flag, consider how it interacts with shared mounts.
      45             :  */
      46             : #define MNT_SHARED_MASK (MNT_UNBINDABLE)
      47             : #define MNT_USER_SETTABLE_MASK  (MNT_NOSUID | MNT_NODEV | MNT_NOEXEC \
      48             :                                  | MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME \
      49             :                                  | MNT_READONLY | MNT_NOSYMFOLLOW)
      50             : #define MNT_ATIME_MASK (MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME )
      51             : 
      52             : #define MNT_INTERNAL_FLAGS (MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | \
      53             :                             MNT_DOOMED | MNT_SYNC_UMOUNT | MNT_MARKED | \
      54             :                             MNT_CURSOR)
      55             : 
      56             : #define MNT_INTERNAL    0x4000
      57             : 
      58             : #define MNT_LOCK_ATIME          0x040000
      59             : #define MNT_LOCK_NOEXEC         0x080000
      60             : #define MNT_LOCK_NOSUID         0x100000
      61             : #define MNT_LOCK_NODEV          0x200000
      62             : #define MNT_LOCK_READONLY       0x400000
      63             : #define MNT_LOCKED              0x800000
      64             : #define MNT_DOOMED              0x1000000
      65             : #define MNT_SYNC_UMOUNT         0x2000000
      66             : #define MNT_MARKED              0x4000000
      67             : #define MNT_UMOUNT              0x8000000
      68             : #define MNT_CURSOR              0x10000000
      69             : 
      70             : struct vfsmount {
      71             :         struct dentry *mnt_root;        /* root of the mounted tree */
      72             :         struct super_block *mnt_sb;     /* pointer to superblock */
      73             :         int mnt_flags;
      74             :         struct mnt_idmap *mnt_idmap;
      75             : } __randomize_layout;
      76             : 
      77             : static inline struct mnt_idmap *mnt_idmap(const struct vfsmount *mnt)
      78             : {
      79             :         /* Pairs with smp_store_release() in do_idmap_mount(). */
      80 56384355171 :         return smp_load_acquire(&mnt->mnt_idmap);
      81             : }
      82             : 
      83             : extern int mnt_want_write(struct vfsmount *mnt);
      84             : extern int mnt_want_write_file(struct file *file);
      85             : extern void mnt_drop_write(struct vfsmount *mnt);
      86             : extern void mnt_drop_write_file(struct file *file);
      87             : extern void mntput(struct vfsmount *mnt);
      88             : extern struct vfsmount *mntget(struct vfsmount *mnt);
      89             : extern void mnt_make_shortterm(struct vfsmount *mnt);
      90             : extern struct vfsmount *mnt_clone_internal(const struct path *path);
      91             : extern bool __mnt_is_readonly(struct vfsmount *mnt);
      92             : extern bool mnt_may_suid(struct vfsmount *mnt);
      93             : 
      94             : extern struct vfsmount *clone_private_mount(const struct path *path);
      95             : extern int __mnt_want_write(struct vfsmount *);
      96             : extern void __mnt_drop_write(struct vfsmount *);
      97             : 
      98             : extern struct vfsmount *fc_mount(struct fs_context *fc);
      99             : extern struct vfsmount *vfs_create_mount(struct fs_context *fc);
     100             : extern struct vfsmount *vfs_kern_mount(struct file_system_type *type,
     101             :                                       int flags, const char *name,
     102             :                                       void *data);
     103             : extern struct vfsmount *vfs_submount(const struct dentry *mountpoint,
     104             :                                      struct file_system_type *type,
     105             :                                      const char *name, void *data);
     106             : 
     107             : extern void mnt_set_expiry(struct vfsmount *mnt, struct list_head *expiry_list);
     108             : extern void mark_mounts_for_expiry(struct list_head *mounts);
     109             : 
     110             : extern bool path_is_mountpoint(const struct path *path);
     111             : 
     112             : extern bool our_mnt(struct vfsmount *mnt);
     113             : 
     114             : extern struct vfsmount *kern_mount(struct file_system_type *);
     115             : extern void kern_unmount(struct vfsmount *mnt);
     116             : extern int may_umount_tree(struct vfsmount *);
     117             : extern int may_umount(struct vfsmount *);
     118             : extern long do_mount(const char *, const char __user *,
     119             :                      const char *, unsigned long, void *);
     120             : extern struct vfsmount *collect_mounts(const struct path *);
     121             : extern void drop_collected_mounts(struct vfsmount *);
     122             : extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
     123             :                           struct vfsmount *);
     124             : extern void kern_unmount_array(struct vfsmount *mnt[], unsigned int num);
     125             : 
     126             : extern int cifs_root_data(char **dev, char **opts);
     127             : 
     128             : #endif /* _LINUX_MOUNT_H */

Generated by: LCOV version 1.14