LCOV - code coverage report
Current view: top level - include/linux - mount.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 7 0.0 %
Date: 2017-01-25 Functions: 0 2 0.0 %

          Line data    Source code
       1             : /*
       2             :  *
       3             :  * Definitions for mount interface. This describes the in the kernel build 
       4             :  * linkedlist with mounted filesystems.
       5             :  *
       6             :  * Author:  Marco van Wieringen <mvw@planets.elm.net>
       7             :  *
       8             :  */
       9             : #ifndef _LINUX_MOUNT_H
      10             : #define _LINUX_MOUNT_H
      11             : 
      12             : #include <linux/types.h>
      13             : #include <linux/list.h>
      14             : #include <linux/nodemask.h>
      15             : #include <linux/spinlock.h>
      16             : #include <asm/atomic.h>
      17             : 
      18             : struct super_block;
      19             : struct vfsmount;
      20             : struct dentry;
      21             : struct mnt_namespace;
      22             : 
      23             : #define MNT_NOSUID      0x01
      24             : #define MNT_NODEV       0x02
      25             : #define MNT_NOEXEC      0x04
      26             : #define MNT_NOATIME     0x08
      27             : #define MNT_NODIRATIME  0x10
      28             : #define MNT_RELATIME    0x20
      29             : #define MNT_READONLY    0x40    /* does the user want this to be r/o? */
      30             : #define MNT_STRICTATIME 0x80
      31             : 
      32             : #define MNT_SHRINKABLE  0x100
      33             : #define MNT_WRITE_HOLD  0x200
      34             : 
      35             : #define MNT_SHARED      0x1000  /* if the vfsmount is a shared mount */
      36             : #define MNT_UNBINDABLE  0x2000  /* if the vfsmount is a unbindable mount */
      37             : #define MNT_PNODE_MASK  0x3000  /* propagation flag mask */
      38             : 
      39             : struct vfsmount {
      40             :         struct list_head mnt_hash;
      41             :         struct vfsmount *mnt_parent;    /* fs we are mounted on */
      42             :         struct dentry *mnt_mountpoint;  /* dentry of mountpoint */
      43             :         struct dentry *mnt_root;        /* root of the mounted tree */
      44             :         struct super_block *mnt_sb;     /* pointer to superblock */
      45             :         struct list_head mnt_mounts;    /* list of children, anchored here */
      46             :         struct list_head mnt_child;     /* and going through their mnt_child */
      47             :         int mnt_flags;
      48             :         /* 4 bytes hole on 64bits arches */
      49             :         const char *mnt_devname;        /* Name of device e.g. /dev/dsk/hda1 */
      50             :         struct list_head mnt_list;
      51             :         struct list_head mnt_expire;    /* link in fs-specific expiry list */
      52             :         struct list_head mnt_share;     /* circular list of shared mounts */
      53             :         struct list_head mnt_slave_list;/* list of slave mounts */
      54             :         struct list_head mnt_slave;     /* slave list entry */
      55             :         struct vfsmount *mnt_master;    /* slave is on master->mnt_slave_list */
      56             :         struct mnt_namespace *mnt_ns;   /* containing namespace */
      57             :         int mnt_id;                     /* mount identifier */
      58             :         int mnt_group_id;               /* peer group identifier */
      59             :         /*
      60             :          * We put mnt_count & mnt_expiry_mark at the end of struct vfsmount
      61             :          * to let these frequently modified fields in a separate cache line
      62             :          * (so that reads of mnt_flags wont ping-pong on SMP machines)
      63             :          */
      64             :         atomic_t mnt_count;
      65             :         int mnt_expiry_mark;            /* true if marked for expiry */
      66             :         int mnt_pinned;
      67             :         int mnt_ghosts;
      68             : #ifdef CONFIG_SMP
      69             :         int *mnt_writers;
      70             : #else
      71             :         int mnt_writers;
      72             : #endif
      73             : };
      74             : 
      75             : static inline int *get_mnt_writers_ptr(struct vfsmount *mnt)
      76             : {
      77             : #ifdef CONFIG_SMP
      78             :         return mnt->mnt_writers;
      79             : #else
      80             :         return &mnt->mnt_writers;
      81             : #endif
      82             : }
      83             : 
      84             : static inline struct vfsmount *mntget(struct vfsmount *mnt)
      85             : {
      86           0 :         if (mnt)
      87           0 :                 atomic_inc(&mnt->mnt_count);
      88           0 :         return mnt;
      89             : }
      90             : 
      91             : struct file; /* forward dec */
      92             : 
      93             : extern int mnt_want_write(struct vfsmount *mnt);
      94             : extern int mnt_want_write_file(struct file *file);
      95             : extern int mnt_clone_write(struct vfsmount *mnt);
      96             : extern void mnt_drop_write(struct vfsmount *mnt);
      97             : extern void mntput_no_expire(struct vfsmount *mnt);
      98             : extern void mnt_pin(struct vfsmount *mnt);
      99             : extern void mnt_unpin(struct vfsmount *mnt);
     100             : extern int __mnt_is_readonly(struct vfsmount *mnt);
     101             : 
     102             : static inline void mntput(struct vfsmount *mnt)
     103             : {
     104           0 :         if (mnt) {
     105           0 :                 mnt->mnt_expiry_mark = 0;
     106           0 :                 mntput_no_expire(mnt);
     107             :         }
     108           0 : }
     109             : 
     110             : extern struct vfsmount *do_kern_mount(const char *fstype, int flags,
     111             :                                       const char *name, void *data);
     112             : 
     113             : struct file_system_type;
     114             : extern struct vfsmount *vfs_kern_mount(struct file_system_type *type,
     115             :                                       int flags, const char *name,
     116             :                                       void *data);
     117             : 
     118             : struct nameidata;
     119             : 
     120             : struct path;
     121             : extern int do_add_mount(struct vfsmount *newmnt, struct path *path,
     122             :                         int mnt_flags, struct list_head *fslist);
     123             : 
     124             : extern void mark_mounts_for_expiry(struct list_head *mounts);
     125             : 
     126             : extern spinlock_t vfsmount_lock;
     127             : extern dev_t name_to_dev_t(char *name);
     128             : 
     129             : #endif /* _LINUX_MOUNT_H */

Generated by: LCOV version 1.10