Re: [RFC][PATCH 01/27] Add vfsmount writer count

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 07, 2006 at 05:10:14PM -0700, Dave Hansen wrote:
> 
> This allows a vfsmount to keep track of how many instances
> of files open for write there are at a given time.  This
> will be useful if it is ever desired to change a mount 
> from r/w to r/o at runtime.
> 
> A mount can also potentially refuse to allow writers; this
> is why mnt_want_write() has a return value.  However, that
> functionality will be added later in the series.  For now,
> always allow new writers.
> 
> Signed-off-by: Dave Hansen <haveblue@xxxxxxxxxx>
> ---
> 
>  lxc-dave/fs/namespace.c        |    1 +
>  lxc-dave/include/linux/mount.h |   14 ++++++++++++++
>  2 files changed, 15 insertions(+)
> 
> diff -puN fs/namespace.c~convert-permission-to-file-and-vfs fs/namespace.c
> --- lxc/fs/namespace.c~convert-permission-to-file-and-vfs	2006-06-07 16:53:11.000000000 -0700
> +++ lxc-dave/fs/namespace.c	2006-06-07 16:53:11.000000000 -0700
> @@ -66,6 +66,7 @@ struct vfsmount *alloc_vfsmnt(const char
>  	if (mnt) {
>  		memset(mnt, 0, sizeof(struct vfsmount));
>  		atomic_set(&mnt->mnt_count, 1);
> +		/* atomic_set(&mnt->writer_count, 0); */

IMHO you should not assume that atomic_set(,0) will not
be required after memset(,0,), so doing it here is the
right thing (tm)

>  		INIT_LIST_HEAD(&mnt->mnt_hash);
>  		INIT_LIST_HEAD(&mnt->mnt_child);
>  		INIT_LIST_HEAD(&mnt->mnt_mounts);
> diff -puN include/linux/mount.h~convert-permission-to-file-and-vfs include/linux/mount.h
> --- lxc/include/linux/mount.h~convert-permission-to-file-and-vfs	2006-06-07 16:53:11.000000000 -0700
> +++ lxc-dave/include/linux/mount.h	2006-06-07 16:53:11.000000000 -0700
> @@ -12,6 +12,8 @@
>  #define _LINUX_MOUNT_H
>  #ifdef __KERNEL__
>  
> +#include <linux/err.h>
> +#include <linux/fs.h>
>  #include <linux/types.h>
>  #include <linux/list.h>
>  #include <linux/spinlock.h>
> @@ -38,6 +40,7 @@ struct vfsmount {
>  	struct list_head mnt_mounts;	/* list of children, anchored here */
>  	struct list_head mnt_child;	/* and going through their mnt_child */
>  	atomic_t mnt_count;
> +	atomic_t mnt_writers;
>  	int mnt_flags;
>  	int mnt_expiry_mark;		/* true if marked for expiry */
>  	char *mnt_devname;		/* Name of device e.g. /dev/dsk/hda1 */
> @@ -58,6 +61,17 @@ static inline struct vfsmount *mntget(st
>  	return mnt;
>  }
>  
> +static inline int mnt_want_write(struct vfsmount *mnt)
> +{
> +	atomic_inc(&mnt->mnt_writers);
> +	return 0;
> +}
> +
> +static inline void mnt_drop_write(struct vfsmount *mnt)
> +{
> +	atomic_dec(&mnt->mnt_writers);
> +}
> +
>  extern void mntput_no_expire(struct vfsmount *mnt);
>  extern void mnt_pin(struct vfsmount *mnt);
>  extern void mnt_unpin(struct vfsmount *mnt);
> diff -L convert-permission-to-file-and-vfs -puN /dev/null /dev/null
> diff -L convert-permission-to-file-and-vfs.patch -puN /dev/null /dev/null
> _

best,
Herbert
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux