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 <[email protected]> 7 * 8 * Version: $Id: mount.h,v 2.0 1996/11/17 16:48:14 mvw Exp mvw $ 9 * 10 */ 11 #ifndef _LINUX_MOUNT_H 12 #define _LINUX_MOUNT_H 13 #ifdef __KERNEL__ 14 15 #include <linux/types.h> 16 #include <linux/list.h> 17 #include <linux/spinlock.h> 18 #include <asm/atomic.h> 19 20 #define MNT_NOSUID 1 21 #define MNT_NODEV 2 22 #define MNT_NOEXEC 4 23 24 struct vfsmount 25 { 26 struct list_head mnt_hash; 27 struct vfsmount *mnt_parent; /* fs we are mounted on */ 28 struct dentry *mnt_mountpoint; /* dentry of mountpoint */ 29 struct dentry *mnt_root; /* root of the mounted tree */ 30 struct super_block *mnt_sb; /* pointer to superblock */ 31 struct list_head mnt_mounts; /* list of children, anchored here */ 32 struct list_head mnt_child; /* and going through their mnt_child */ 33 atomic_t mnt_count; 34 int mnt_flags; 35 int mnt_expiry_mark; /* true if marked for expiry */ 36 char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */ 37 struct list_head mnt_list; 38 struct list_head mnt_expire; /* link in fs-specific expiry list */ 39 struct namespace *mnt_namespace; /* containing namespace */ 40 }; 41 42 static inline struct vfsmount *mntget(struct vfsmount *mnt) 43 { 44 if (mnt) 45 atomic_inc(&mnt->mnt_count); 46 return mnt; 47 } 48 49 extern void __mntput(struct vfsmount *mnt); 50 51 static inline void mntput_no_expire(struct vfsmount *mnt) 52 { 53 if (mnt) { 54 if (atomic_dec_and_test(&mnt->mnt_count)) 55 __mntput(mnt); 56 } 57 } 58 59 static inline void mntput(struct vfsmount *mnt) 60 { 61 if (mnt) { 62 mnt->mnt_expiry_mark = 0; 63 mntput_no_expire(mnt); 64 } 65 } 66 67 extern void free_vfsmnt(struct vfsmount *mnt); 68 extern struct vfsmount *alloc_vfsmnt(const char *name); 69 extern struct vfsmount *do_kern_mount(const char *fstype, int flags, 70 const char *name, void *data); 71 72 struct nameidata; 73 74 extern int do_add_mount(struct vfsmount *newmnt, struct nameidata *nd, 75 int mnt_flags, struct list_head *fslist); 76 77 extern void mark_mounts_for_expiry(struct list_head *mounts); 78 79 extern spinlock_t vfsmount_lock; 80 extern dev_t name_to_dev_t(char *name); 81 82 #endif 83 #endif /* _LINUX_MOUNT_H */ 84