introduce slave mounts
PATCH 15/18 introduce slave mounts
From: Ram Pai <[email protected]>
Date: 1131402048 -0500
A slave mount always has a master mount from which it receives mount/umount events. Unlike shared mount the event propagation does not flow from the slave mount to the master.
Signed-off-by Ram Pai ([email protected])
Signed-off-by Al Viro <[email protected]>
---
fs/namespace.c | 4 +++- fs/pnode.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++--- fs/pnode.h | 2 ++ include/linux/fs.h | 1 + include/linux/mount.h | 3 +++ 5 files changed, 60 insertions(+), 4 deletions(-)
f98429253bbedb8511dd1c0af294d95a4c5cbc5d
fs/namespace.c +3 -1
@@ -67,6 +67,8 @@ struct vfsmount *alloc_vfsmnt(const charINIT_LIST_HEAD (&mnt->mnt_list);INIT_LIST_HEAD (&mnt->mnt_expire);INIT_LIST_HEAD (&mnt->mnt_share); +INIT_LIST_HEAD (&mnt->mnt_slave_list); +INIT_LIST_HEAD (&mnt->mnt_slave);if (name) {int size =strlen (name) +1 ;char *newname =kmalloc (size,GFP_KERNEL );
@@ -1243,7 +1245,7 @@ long do_mount(char *dev_name, char *dir_ data_page); else if (flags & MS_BIND) retval =do_loopback (&nd, dev_name, flags &MS_REC ); - else if (flags & (MS_SHARED | MS_PRIVATE)) + else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE)) retval =do_change_type (&nd, flags); else if (flags & MS_MOVE) retval =do_move_mount (&nd, dev_name);
fs/pnode.c +51 -3
64 lines not on this page · raw message
fs/pnode.h +2 -0
@@ -12,10 +12,12 @@#include <linux/mount.h> #define IS_MNT_SHARED (mnt) (mnt->mnt_flags & MNT_SHARED) +#define IS_MNT_SLAVE (mnt) (mnt->mnt_master)#define IS_MNT_NEW (mnt) (!mnt->mnt_namespace)#define CLEAR_MNT_SHARED (mnt) (mnt->mnt_flags &= ~MNT_SHARED)#define CL_EXPIRE 0x01 +#define CL_SLAVE 0x02#define CL_COPY_ALL 0x04#define CL_MAKE_SHARED 0x08#define CL_PROPAGATION 0x10
include/linux/fs.h +1 -0
@@ -105,6 +105,7 @@ extern int dir_notify_enable;#define MS_REC 16384#define MS_VERBOSE 32768#define MS_PRIVATE (1<<18)/* change to private */ +#define MS_SLAVE (1<<19)/* change to slave */ #define MS_SHARED (1<<20)/* change to shared */ #define MS_POSIXACL (1<<16)/* VFS does not apply the umask */ #define MS_ACTIVE (1<<30)
include/linux/mount.h +3 -0
@@ -38,6 +38,9 @@ struct vfsmount {struct list_head mnt_list;struct list_head mnt_expire;/* link in fs-specific expiry list */ struct list_head mnt_share;/* circular list of shared mounts */ +struct list_head mnt_slave_list;/* list of slave mounts */ +struct list_head mnt_slave;/* slave list entry */ +struct vfsmount *mnt_master;/* slave is on master->mnt_slave_list */ struct namespace *mnt_namespace;/* containing namespace */ int mnt_pinned; };