| Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 1 | #include <linux/mount.h> | 
| Al Viro | 0226f49 | 2011-12-06 12:21:54 -0500 | [diff] [blame] | 2 | #include <linux/seq_file.h> | 
|  | 3 | #include <linux/poll.h> | 
|  | 4 |  | 
|  | 5 | struct mnt_namespace { | 
|  | 6 | atomic_t		count; | 
| Al Viro | be08d6d | 2011-12-06 13:32:36 -0500 | [diff] [blame] | 7 | struct mount *	root; | 
| Al Viro | 0226f49 | 2011-12-06 12:21:54 -0500 | [diff] [blame] | 8 | struct list_head	list; | 
|  | 9 | wait_queue_head_t poll; | 
|  | 10 | int event; | 
|  | 11 | }; | 
| Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 12 |  | 
| Al Viro | 68e8a9f | 2011-11-24 22:53:09 -0500 | [diff] [blame] | 13 | struct mnt_pcp { | 
|  | 14 | int mnt_count; | 
|  | 15 | int mnt_writers; | 
|  | 16 | }; | 
|  | 17 |  | 
| Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 18 | struct mount { | 
| Al Viro | 1b8e556 | 2011-11-24 21:01:32 -0500 | [diff] [blame] | 19 | struct list_head mnt_hash; | 
| Al Viro | 0714a53 | 2011-11-24 22:19:58 -0500 | [diff] [blame] | 20 | struct mount *mnt_parent; | 
| Al Viro | a73324d | 2011-11-24 22:25:07 -0500 | [diff] [blame] | 21 | struct dentry *mnt_mountpoint; | 
| Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 22 | struct vfsmount mnt; | 
| Al Viro | 68e8a9f | 2011-11-24 22:53:09 -0500 | [diff] [blame] | 23 | #ifdef CONFIG_SMP | 
|  | 24 | struct mnt_pcp __percpu *mnt_pcp; | 
|  | 25 | atomic_t mnt_longterm;		/* how many of the refs are longterm */ | 
|  | 26 | #else | 
|  | 27 | int mnt_count; | 
|  | 28 | int mnt_writers; | 
|  | 29 | #endif | 
| Al Viro | 6b41d53 | 2011-11-24 23:24:33 -0500 | [diff] [blame] | 30 | struct list_head mnt_mounts;	/* list of children, anchored here */ | 
|  | 31 | struct list_head mnt_child;	/* and going through their mnt_child */ | 
| Miklos Szeredi | 39f7c4d | 2011-11-21 12:11:30 +0100 | [diff] [blame] | 32 | struct list_head mnt_instance;	/* mount instance on sb->s_mounts */ | 
| Al Viro | 52ba162 | 2011-11-25 02:25:17 -0500 | [diff] [blame] | 33 | const char *mnt_devname;	/* Name of device e.g. /dev/dsk/hda1 */ | 
| Al Viro | 1a4eeaf | 2011-11-25 02:19:55 -0500 | [diff] [blame] | 34 | struct list_head mnt_list; | 
| Al Viro | 6776db3d | 2011-11-25 00:22:05 -0500 | [diff] [blame] | 35 | struct list_head mnt_expire;	/* link in fs-specific expiry list */ | 
|  | 36 | struct list_head mnt_share;	/* circular list of shared mounts */ | 
|  | 37 | struct list_head mnt_slave_list;/* list of slave mounts */ | 
|  | 38 | struct list_head mnt_slave;	/* slave list entry */ | 
| Al Viro | 3230192 | 2011-11-25 00:10:28 -0500 | [diff] [blame] | 39 | struct mount *mnt_master;	/* slave is on master->mnt_slave_list */ | 
| Al Viro | 143c8c9 | 2011-11-25 00:46:35 -0500 | [diff] [blame] | 40 | struct mnt_namespace *mnt_ns;	/* containing namespace */ | 
| Al Viro | c63181e | 2011-11-25 02:35:16 -0500 | [diff] [blame] | 41 | #ifdef CONFIG_FSNOTIFY | 
|  | 42 | struct hlist_head mnt_fsnotify_marks; | 
|  | 43 | __u32 mnt_fsnotify_mask; | 
|  | 44 | #endif | 
| Al Viro | 15169fe | 2011-11-25 00:50:41 -0500 | [diff] [blame] | 45 | int mnt_id;			/* mount identifier */ | 
|  | 46 | int mnt_group_id;		/* peer group identifier */ | 
| Al Viro | 863d684 | 2011-11-25 00:57:42 -0500 | [diff] [blame] | 47 | int mnt_expiry_mark;		/* true if marked for expiry */ | 
|  | 48 | int mnt_pinned; | 
|  | 49 | int mnt_ghosts; | 
| Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 50 | }; | 
|  | 51 |  | 
|  | 52 | static inline struct mount *real_mount(struct vfsmount *mnt) | 
|  | 53 | { | 
|  | 54 | return container_of(mnt, struct mount, mnt); | 
|  | 55 | } | 
|  | 56 |  | 
| Al Viro | 676da58 | 2011-11-24 21:47:05 -0500 | [diff] [blame] | 57 | static inline int mnt_has_parent(struct mount *mnt) | 
| Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 58 | { | 
| Al Viro | 0714a53 | 2011-11-24 22:19:58 -0500 | [diff] [blame] | 59 | return mnt != mnt->mnt_parent; | 
| Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 60 | } | 
| Al Viro | c710536 | 2011-11-24 18:22:03 -0500 | [diff] [blame] | 61 |  | 
|  | 62 | extern struct mount *__lookup_mnt(struct vfsmount *, struct dentry *, int); | 
| Al Viro | 0226f49 | 2011-12-06 12:21:54 -0500 | [diff] [blame] | 63 |  | 
|  | 64 | static inline void get_mnt_ns(struct mnt_namespace *ns) | 
|  | 65 | { | 
|  | 66 | atomic_inc(&ns->count); | 
|  | 67 | } | 
|  | 68 |  | 
|  | 69 | struct proc_mounts { | 
|  | 70 | struct seq_file m; /* must be the first element */ | 
|  | 71 | struct mnt_namespace *ns; | 
|  | 72 | struct path root; | 
|  | 73 | int (*show)(struct seq_file *, struct vfsmount *); | 
|  | 74 | }; | 
|  | 75 |  | 
|  | 76 | extern const struct seq_operations mounts_op; |