Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 1 | #include <linux/mount.h> |
| 2 | |
Al Viro | 68e8a9f | 2011-11-24 22:53:09 -0500 | [diff] [blame] | 3 | struct mnt_pcp { |
| 4 | int mnt_count; |
| 5 | int mnt_writers; |
| 6 | }; |
| 7 | |
Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 8 | struct mount { |
Al Viro | 1b8e556 | 2011-11-24 21:01:32 -0500 | [diff] [blame] | 9 | struct list_head mnt_hash; |
Al Viro | 0714a53 | 2011-11-24 22:19:58 -0500 | [diff] [blame] | 10 | struct mount *mnt_parent; |
Al Viro | a73324d | 2011-11-24 22:25:07 -0500 | [diff] [blame] | 11 | struct dentry *mnt_mountpoint; |
Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 12 | struct vfsmount mnt; |
Al Viro | 68e8a9f | 2011-11-24 22:53:09 -0500 | [diff] [blame] | 13 | #ifdef CONFIG_SMP |
| 14 | struct mnt_pcp __percpu *mnt_pcp; |
| 15 | atomic_t mnt_longterm; /* how many of the refs are longterm */ |
| 16 | #else |
| 17 | int mnt_count; |
| 18 | int mnt_writers; |
| 19 | #endif |
Al Viro | 6b41d53 | 2011-11-24 23:24:33 -0500 | [diff] [blame^] | 20 | struct list_head mnt_mounts; /* list of children, anchored here */ |
| 21 | struct list_head mnt_child; /* and going through their mnt_child */ |
Al Viro | 7d6fec4 | 2011-11-23 12:14:10 -0500 | [diff] [blame] | 22 | }; |
| 23 | |
| 24 | static inline struct mount *real_mount(struct vfsmount *mnt) |
| 25 | { |
| 26 | return container_of(mnt, struct mount, mnt); |
| 27 | } |
| 28 | |
Al Viro | 676da58 | 2011-11-24 21:47:05 -0500 | [diff] [blame] | 29 | static inline int mnt_has_parent(struct mount *mnt) |
Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 30 | { |
Al Viro | 0714a53 | 2011-11-24 22:19:58 -0500 | [diff] [blame] | 31 | return mnt != mnt->mnt_parent; |
Al Viro | b2dba1a | 2011-11-23 19:26:23 -0500 | [diff] [blame] | 32 | } |
Al Viro | c710536 | 2011-11-24 18:22:03 -0500 | [diff] [blame] | 33 | |
| 34 | extern struct mount *__lookup_mnt(struct vfsmount *, struct dentry *, int); |