| 
							
							
							
						 |  |  | @@ -1,5 +1,3 @@ | 
		
	
		
			
				|  |  |  |  | diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking | 
		
	
		
			
				|  |  |  |  | index 0706d32..4331290 100644 | 
		
	
		
			
				|  |  |  |  | --- a/Documentation/filesystems/Locking | 
		
	
		
			
				|  |  |  |  | +++ b/Documentation/filesystems/Locking | 
		
	
		
			
				|  |  |  |  | @@ -66,6 +66,7 @@ prototypes: | 
		
	
	
		
			
				
					
					|  |  |  | @@ -18,9 +16,6 @@ index 0706d32..4331290 100644 | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  	Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on | 
		
	
		
			
				|  |  |  |  |  victim. | 
		
	
		
			
				|  |  |  |  | diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..00dbab0 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/Documentation/filesystems/overlayfs.txt | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,199 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -223,8 +218,6 @@ index 0000000..00dbab0 | 
		
	
		
			
				|  |  |  |  | +filesystem are not allowed.  If the underlying filesystem is changed, | 
		
	
		
			
				|  |  |  |  | +the behavior of the overlay is undefined, though it will not result in | 
		
	
		
			
				|  |  |  |  | +a crash or deadlock. | 
		
	
		
			
				|  |  |  |  | diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt | 
		
	
		
			
				|  |  |  |  | index bc4b06b..f64a4d1 100644 | 
		
	
		
			
				|  |  |  |  | --- a/Documentation/filesystems/vfs.txt | 
		
	
		
			
				|  |  |  |  | +++ b/Documentation/filesystems/vfs.txt | 
		
	
		
			
				|  |  |  |  | @@ -362,6 +362,7 @@ struct inode_operations { | 
		
	
	
		
			
				
					
					|  |  |  | @@ -248,8 +241,6 @@ index bc4b06b..f64a4d1 100644 | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |    invalidatepage: If a page has PagePrivate set, then invalidatepage | 
		
	
		
			
				|  |  |  |  |          will be called when part or all of the page is to be removed | 
		
	
		
			
				|  |  |  |  | diff --git a/MAINTAINERS b/MAINTAINERS | 
		
	
		
			
				|  |  |  |  | index 9561658..9ea89b8 100644 | 
		
	
		
			
				|  |  |  |  | --- a/MAINTAINERS | 
		
	
		
			
				|  |  |  |  | +++ b/MAINTAINERS | 
		
	
		
			
				|  |  |  |  | @@ -5872,6 +5872,13 @@ F:	drivers/scsi/osd/ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -266,8 +257,6 @@ index 9561658..9ea89b8 100644 | 
		
	
		
			
				|  |  |  |  |  P54 WIRELESS DRIVER | 
		
	
		
			
				|  |  |  |  |  M:	Christian Lamparter <chunkeey@googlemail.com> | 
		
	
		
			
				|  |  |  |  |  L:	linux-wireless@vger.kernel.org | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/Kconfig b/fs/Kconfig | 
		
	
		
			
				|  |  |  |  | index 780725a..9e2ccd5 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/Kconfig | 
		
	
		
			
				|  |  |  |  | +++ b/fs/Kconfig | 
		
	
		
			
				|  |  |  |  | @@ -67,6 +67,7 @@ source "fs/quota/Kconfig" | 
		
	
	
		
			
				
					
					|  |  |  | @@ -278,8 +267,6 @@ index 780725a..9e2ccd5 100644 | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  config GENERIC_ACL | 
		
	
		
			
				|  |  |  |  |  	bool | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/Makefile b/fs/Makefile | 
		
	
		
			
				|  |  |  |  | index 9d53192..479a720 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/Makefile | 
		
	
		
			
				|  |  |  |  | +++ b/fs/Makefile | 
		
	
		
			
				|  |  |  |  | @@ -107,6 +107,7 @@ obj-$(CONFIG_QNX6FS_FS)		+= qnx6/ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -290,11 +277,9 @@ index 9d53192..479a720 100644 | 
		
	
		
			
				|  |  |  |  |  obj-$(CONFIG_UDF_FS)		+= udf/ | 
		
	
		
			
				|  |  |  |  |  obj-$(CONFIG_SUN_OPENPROMFS)	+= openpromfs/ | 
		
	
		
			
				|  |  |  |  |  obj-$(CONFIG_OMFS_FS)		+= omfs/ | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c | 
		
	
		
			
				|  |  |  |  | index e924cf4..8f7551e 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/ecryptfs/main.c | 
		
	
		
			
				|  |  |  |  | +++ b/fs/ecryptfs/main.c | 
		
	
		
			
				|  |  |  |  | @@ -567,6 +567,13 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags | 
		
	
		
			
				|  |  |  |  | @@ -567,6 +567,13 @@ static struct dentry *ecryptfs_mount(str | 
		
	
		
			
				|  |  |  |  |  	s->s_maxbytes = path.dentry->d_sb->s_maxbytes; | 
		
	
		
			
				|  |  |  |  |  	s->s_blocksize = path.dentry->d_sb->s_blocksize; | 
		
	
		
			
				|  |  |  |  |  	s->s_magic = ECRYPTFS_SUPER_MAGIC; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -308,11 +293,9 @@ index e924cf4..8f7551e 100644 | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  	inode = ecryptfs_get_inode(path.dentry->d_inode, s); | 
		
	
		
			
				|  |  |  |  |  	rc = PTR_ERR(inode); | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/internal.h b/fs/internal.h | 
		
	
		
			
				|  |  |  |  | index 507141f..89481ac 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/internal.h | 
		
	
		
			
				|  |  |  |  | +++ b/fs/internal.h | 
		
	
		
			
				|  |  |  |  | @@ -42,11 +42,6 @@ static inline int __sync_blockdev(struct block_device *bdev, int wait) | 
		
	
		
			
				|  |  |  |  | @@ -42,11 +42,6 @@ static inline int __sync_blockdev(struct | 
		
	
		
			
				|  |  |  |  |  extern void __init chrdev_init(void); | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  /* | 
		
	
	
		
			
				
					
					|  |  |  | @@ -324,11 +307,9 @@ index 507141f..89481ac 100644 | 
		
	
		
			
				|  |  |  |  |   * namespace.c | 
		
	
		
			
				|  |  |  |  |   */ | 
		
	
		
			
				|  |  |  |  |  extern int copy_mount_options(const void __user *, unsigned long *); | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/namei.c b/fs/namei.c | 
		
	
		
			
				|  |  |  |  | index 57ae9c8..e1cffbd 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/namei.c | 
		
	
		
			
				|  |  |  |  | +++ b/fs/namei.c | 
		
	
		
			
				|  |  |  |  | @@ -402,6 +402,7 @@ int __inode_permission(struct inode *inode, int mask) | 
		
	
		
			
				|  |  |  |  | @@ -402,6 +402,7 @@ int __inode_permission(struct inode *ino | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  	return security_inode_permission(inode, mask); | 
		
	
		
			
				|  |  |  |  |  } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -352,11 +333,9 @@ index 57ae9c8..e1cffbd 100644 | 
		
	
		
			
				|  |  |  |  |  		if (error == -EOPENSTALE) | 
		
	
		
			
				|  |  |  |  |  			goto stale_open; | 
		
	
		
			
				|  |  |  |  |  		goto out; | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/namespace.c b/fs/namespace.c | 
		
	
		
			
				|  |  |  |  | index 50ca17d..9791b4e 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/namespace.c | 
		
	
		
			
				|  |  |  |  | +++ b/fs/namespace.c | 
		
	
		
			
				|  |  |  |  | @@ -1399,6 +1399,24 @@ void drop_collected_mounts(struct vfsmount *mnt) | 
		
	
		
			
				|  |  |  |  | @@ -1399,6 +1399,24 @@ void drop_collected_mounts(struct vfsmou | 
		
	
		
			
				|  |  |  |  |  	release_mounts(&umount_list); | 
		
	
		
			
				|  |  |  |  |  } | 
		
	
		
			
				|  |  |  |  |   | 
		
	
	
		
			
				
					
					|  |  |  | @@ -381,11 +360,9 @@ index 50ca17d..9791b4e 100644 | 
		
	
		
			
				|  |  |  |  |  int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, | 
		
	
		
			
				|  |  |  |  |  		   struct vfsmount *root) | 
		
	
		
			
				|  |  |  |  |  { | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/open.c b/fs/open.c | 
		
	
		
			
				|  |  |  |  | index 6835446..b9d9f9e 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/open.c | 
		
	
		
			
				|  |  |  |  | +++ b/fs/open.c | 
		
	
		
			
				|  |  |  |  | @@ -828,8 +828,7 @@ struct file *dentry_open(const struct path *path, int flags, | 
		
	
		
			
				|  |  |  |  | @@ -828,8 +828,7 @@ struct file *dentry_open(const struct pa | 
		
	
		
			
				|  |  |  |  |  	f = get_empty_filp(); | 
		
	
		
			
				|  |  |  |  |  	if (!IS_ERR(f)) { | 
		
	
		
			
				|  |  |  |  |  		f->f_flags = flags; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -395,7 +372,7 @@ index 6835446..b9d9f9e 100644 | 
		
	
		
			
				|  |  |  |  |  		if (!error) { | 
		
	
		
			
				|  |  |  |  |  			/* from now on we need fput() to dispose of f */ | 
		
	
		
			
				|  |  |  |  |  			error = open_check_o_direct(f); | 
		
	
		
			
				|  |  |  |  | @@ -846,6 +845,26 @@ struct file *dentry_open(const struct path *path, int flags, | 
		
	
		
			
				|  |  |  |  | @@ -846,6 +845,26 @@ struct file *dentry_open(const struct pa | 
		
	
		
			
				|  |  |  |  |  } | 
		
	
		
			
				|  |  |  |  |  EXPORT_SYMBOL(dentry_open); | 
		
	
		
			
				|  |  |  |  |   | 
		
	
	
		
			
				
					
					|  |  |  | @@ -422,9 +399,6 @@ index 6835446..b9d9f9e 100644 | 
		
	
		
			
				|  |  |  |  |  static inline int build_open_flags(int flags, umode_t mode, struct open_flags *op) | 
		
	
		
			
				|  |  |  |  |  { | 
		
	
		
			
				|  |  |  |  |  	int lookup_flags = 0; | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..c4517da | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/Kconfig | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,4 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -432,9 +406,6 @@ index 0000000..c4517da | 
		
	
		
			
				|  |  |  |  | +	tristate "Overlay filesystem support" | 
		
	
		
			
				|  |  |  |  | +	help | 
		
	
		
			
				|  |  |  |  | +	  Add support for overlay filesystem. | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/Makefile b/fs/overlayfs/Makefile | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..8f91889 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/Makefile | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,7 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -445,9 +416,6 @@ index 0000000..8f91889 | 
		
	
		
			
				|  |  |  |  | +obj-$(CONFIG_OVERLAYFS_FS) += overlayfs.o | 
		
	
		
			
				|  |  |  |  | + | 
		
	
		
			
				|  |  |  |  | +overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..eef85e0 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/copy_up.c | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,385 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -836,9 +804,6 @@ index 0000000..eef85e0 | 
		
	
		
			
				|  |  |  |  | +	dput(parent); | 
		
	
		
			
				|  |  |  |  | +	return err; | 
		
	
		
			
				|  |  |  |  | +} | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..b530e56 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/dir.c | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,604 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1446,9 +1411,6 @@ index 0000000..b530e56 | 
		
	
		
			
				|  |  |  |  | +	.listxattr	= ovl_listxattr, | 
		
	
		
			
				|  |  |  |  | +	.removexattr	= ovl_removexattr, | 
		
	
		
			
				|  |  |  |  | +}; | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..ee37e92 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/inode.c | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,372 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1824,9 +1786,6 @@ index 0000000..ee37e92 | 
		
	
		
			
				|  |  |  |  | +	return inode; | 
		
	
		
			
				|  |  |  |  | + | 
		
	
		
			
				|  |  |  |  | +} | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..1cba38f | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/overlayfs.h | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,70 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -1900,9 +1859,6 @@ index 0000000..1cba38f | 
		
	
		
			
				|  |  |  |  | +/* copy_up.c */ | 
		
	
		
			
				|  |  |  |  | +int ovl_copy_up(struct dentry *dentry); | 
		
	
		
			
				|  |  |  |  | +int ovl_copy_up_truncate(struct dentry *dentry, loff_t size); | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..0797efb | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/readdir.c | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,566 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -2472,9 +2428,6 @@ index 0000000..0797efb | 
		
	
		
			
				|  |  |  |  | + | 
		
	
		
			
				|  |  |  |  | +	return err; | 
		
	
		
			
				|  |  |  |  | +} | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c | 
		
	
		
			
				|  |  |  |  | new file mode 100644 | 
		
	
		
			
				|  |  |  |  | index 0000000..357d6e8 | 
		
	
		
			
				|  |  |  |  | --- /dev/null | 
		
	
		
			
				|  |  |  |  | +++ b/fs/overlayfs/super.c | 
		
	
		
			
				|  |  |  |  | @@ -0,0 +1,685 @@ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3163,11 +3116,9 @@ index 0000000..357d6e8 | 
		
	
		
			
				|  |  |  |  | + | 
		
	
		
			
				|  |  |  |  | +module_init(ovl_init); | 
		
	
		
			
				|  |  |  |  | +module_exit(ovl_exit); | 
		
	
		
			
				|  |  |  |  | diff --git a/fs/splice.c b/fs/splice.c | 
		
	
		
			
				|  |  |  |  | index 718bd00..0e8f44a 100644 | 
		
	
		
			
				|  |  |  |  | --- a/fs/splice.c | 
		
	
		
			
				|  |  |  |  | +++ b/fs/splice.c | 
		
	
		
			
				|  |  |  |  | @@ -1308,6 +1308,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | 
		
	
		
			
				|  |  |  |  | @@ -1308,6 +1308,7 @@ long do_splice_direct(struct file *in, l | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  	return ret; | 
		
	
		
			
				|  |  |  |  |  } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3175,8 +3126,6 @@ index 718bd00..0e8f44a 100644 | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, | 
		
	
		
			
				|  |  |  |  |  			       struct pipe_inode_info *opipe, | 
		
	
		
			
				|  |  |  |  | diff --git a/include/linux/fs.h b/include/linux/fs.h | 
		
	
		
			
				|  |  |  |  | index 2c28271..3353de6 100644 | 
		
	
		
			
				|  |  |  |  | --- a/include/linux/fs.h | 
		
	
		
			
				|  |  |  |  | +++ b/include/linux/fs.h | 
		
	
		
			
				|  |  |  |  | @@ -244,6 +244,12 @@ struct iattr { | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3212,7 +3161,7 @@ index 2c28271..3353de6 100644 | 
		
	
		
			
				|  |  |  |  |  } ____cacheline_aligned; | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 
		
	
		
			
				|  |  |  |  | @@ -2006,6 +2018,7 @@ extern struct file *file_open_name(struct filename *, int, umode_t); | 
		
	
		
			
				|  |  |  |  | @@ -2006,6 +2018,7 @@ extern struct file *file_open_name(struc | 
		
	
		
			
				|  |  |  |  |  extern struct file *filp_open(const char *, int, umode_t); | 
		
	
		
			
				|  |  |  |  |  extern struct file *file_open_root(struct dentry *, struct vfsmount *, | 
		
	
		
			
				|  |  |  |  |  				   const char *, int); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3220,7 +3169,7 @@ index 2c28271..3353de6 100644 | 
		
	
		
			
				|  |  |  |  |  extern struct file * dentry_open(const struct path *, int, const struct cred *); | 
		
	
		
			
				|  |  |  |  |  extern int filp_close(struct file *, fl_owner_t id); | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  | @@ -2211,6 +2224,7 @@ extern sector_t bmap(struct inode *, sector_t); | 
		
	
		
			
				|  |  |  |  | @@ -2211,6 +2224,7 @@ extern sector_t bmap(struct inode *, sec | 
		
	
		
			
				|  |  |  |  |  #endif | 
		
	
		
			
				|  |  |  |  |  extern int notify_change(struct dentry *, struct iattr *); | 
		
	
		
			
				|  |  |  |  |  extern int inode_permission(struct inode *, int); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -3228,11 +3177,9 @@ index 2c28271..3353de6 100644 | 
		
	
		
			
				|  |  |  |  |  extern int generic_permission(struct inode *, int); | 
		
	
		
			
				|  |  |  |  |   | 
		
	
		
			
				|  |  |  |  |  static inline bool execute_ok(struct inode *inode) | 
		
	
		
			
				|  |  |  |  | diff --git a/include/linux/mount.h b/include/linux/mount.h | 
		
	
		
			
				|  |  |  |  | index d7029f4..344a262 100644 | 
		
	
		
			
				|  |  |  |  | --- a/include/linux/mount.h | 
		
	
		
			
				|  |  |  |  | +++ b/include/linux/mount.h | 
		
	
		
			
				|  |  |  |  | @@ -66,6 +66,9 @@ extern void mnt_pin(struct vfsmount *mnt); | 
		
	
		
			
				|  |  |  |  | @@ -66,6 +66,9 @@ extern void mnt_pin(struct vfsmount *mnt | 
		
	
		
			
				|  |  |  |  |  extern void mnt_unpin(struct vfsmount *mnt); | 
		
	
		
			
				|  |  |  |  |  extern int __mnt_is_readonly(struct vfsmount *mnt); | 
		
	
		
			
				|  |  |  |  |   | 
		
	
	
		
			
				
					
					|  |  |  |   |