All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <haveblue@us.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, herbert@13thfloor.at,
	viro@ftp.linux.org.uk, Dave Hansen <haveblue@us.ibm.com>
Subject: [RFC][PATCH 19/20] elevate writer count for custom 'struct file'
Date: Fri, 16 Jun 2006 16:12:27 -0700	[thread overview]
Message-ID: <20060616231227.3DB969AB@localhost.localdomain> (raw)
In-Reply-To: <20060616231213.D4C5D6AF@localhost.localdomain>


Some filesystems forego the vfs and may_open() and create their
own 'struct file's.  Any of these users which set the write flag
on the file will cause an extra mnt_drop_write() on __fput(),
thus dropping the reference count too low.

These users tend to have artifical in-kernel vfsmounts which
aren't really exposed to userspace and can't be remounted, but
this patch is included for completeness and so that the warnings
don't trip over these cases.

Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
---

 lxc-dave/fs/hugetlbfs/inode.c |    2 ++
 lxc-dave/mm/shmem.c           |    2 ++
 lxc-dave/mm/tiny-shmem.c      |    2 ++
 lxc-dave/net/socket.c         |    3 +++
 4 files changed, 9 insertions(+)

diff -puN fs/hugetlbfs/inode.c~fix-__fput-rev2 fs/hugetlbfs/inode.c
--- lxc/fs/hugetlbfs/inode.c~fix-__fput-rev2	2006-06-16 15:58:11.000000000 -0700
+++ lxc-dave/fs/hugetlbfs/inode.c	2006-06-16 15:58:11.000000000 -0700
@@ -790,6 +790,8 @@ struct file *hugetlb_zero_setup(size_t s
 	file->f_mapping = inode->i_mapping;
 	file->f_op = &hugetlbfs_file_operations;
 	file->f_mode = FMODE_WRITE | FMODE_READ;
+	error = mnt_want_write(hugetlbfs_vfsmount);
+	WARN_ON(error);
 	return file;
 
 out_inode:
diff -puN mm/shmem.c~fix-__fput-rev2 mm/shmem.c
--- lxc/mm/shmem.c~fix-__fput-rev2	2006-06-16 15:58:11.000000000 -0700
+++ lxc-dave/mm/shmem.c	2006-06-16 15:58:11.000000000 -0700
@@ -2324,6 +2324,8 @@ struct file *shmem_file_setup(char *name
 	file->f_mapping = inode->i_mapping;
 	file->f_op = &shmem_file_operations;
 	file->f_mode = FMODE_WRITE | FMODE_READ;
+	error = mnt_want_write(shm_mnt);
+	WARN_ON(error);
 	return file;
 
 close_file:
diff -puN mm/tiny-shmem.c~fix-__fput-rev2 mm/tiny-shmem.c
--- lxc/mm/tiny-shmem.c~fix-__fput-rev2	2006-06-16 15:58:11.000000000 -0700
+++ lxc-dave/mm/tiny-shmem.c	2006-06-16 15:58:11.000000000 -0700
@@ -88,6 +88,8 @@ struct file *shmem_file_setup(char *name
 	file->f_mapping = inode->i_mapping;
 	file->f_op = &ramfs_file_operations;
 	file->f_mode = FMODE_WRITE | FMODE_READ;
+	error = mnt_want_write(shm_mnt);
+	WARN_ON(error);
 
 	/* notify everyone as to the change of file size */
 	error = do_truncate(dentry, size, 0, file);
diff -puN net/socket.c~fix-__fput-rev2 net/socket.c
--- lxc/net/socket.c~fix-__fput-rev2	2006-06-16 15:58:11.000000000 -0700
+++ lxc-dave/net/socket.c	2006-06-16 15:58:11.000000000 -0700
@@ -395,6 +395,7 @@ static int sock_attach_fd(struct socket 
 {
 	struct qstr this;
 	char name[32];
+	int error;
 
 	this.len = sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
 	this.name = name;
@@ -415,6 +416,8 @@ static int sock_attach_fd(struct socket 
 	file->f_flags = O_RDWR;
 	file->f_pos = 0;
 	file->private_data = sock;
+	error = mnt_want_write(sock_mnt);
+	WARN_ON(error);
 
 	return 0;
 }
_

  parent reply	other threads:[~2006-06-16 23:15 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-16 23:12 [RFC][PATCH 00/20] Mount writer count and read-only bind mounts (v2) Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 01/20] prepare for write access checks: collapse if() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 02/20] r/o bind mount prepwork: move open_namei()'s vfs_create() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 03/20] Add vfsmount writer count Dave Hansen
2006-06-18 18:33   ` Al Viro
2006-06-19 17:02     ` Dave Hansen
2006-06-20 21:20       ` Al Viro
2006-06-22 17:01         ` Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 04/20] elevate mnt writers for callers of vfs_mkdir() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 05/20] elevate write count during entire ncp_ioctl() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 07/20] elevate mount count for extended attributes Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 06/20] sys_symlinkat() elevate write count around vfs_symlink() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 08/20] sys_linkat(): elevate write count around vfs_link() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 09/20] mount_is_safe(): add comment Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 11/20] elevate write count over calls to vfs_rename() Dave Hansen
2006-06-18 18:23   ` Al Viro
2006-06-19 17:18     ` Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 10/20] unix_find_other() elevate write count for touch_atime() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 12/20] tricky: elevate write count files are open()ed Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 13/20] elevate writer count for do_sys_truncate() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 14/20] elevate write count for do_utimes() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 15/20] elevate write count for do_sys_utime() and touch_atime() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 16/20] sys_mknodat(): elevate write count for vfs_mknod/create() Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 17/20] elevate mnt writers for vfs_unlink() callers Dave Hansen
2006-06-16 23:12 ` [RFC][PATCH 18/20] do_rmdir(): elevate write count Dave Hansen
2006-06-16 23:12 ` Dave Hansen [this message]
2006-06-16 23:12 ` [RFC][PATCH 20/20] honor r/w changes at do_remount() time Dave Hansen
2006-06-18 18:36   ` Al Viro
2006-06-19 16:45     ` Dave Hansen
2006-06-16 23:29 ` [RFC][PATCH 00/20] Mount writer count and read-only bind mounts (v2) Grzegorz Kulewski
2006-06-16 23:41   ` Dave Hansen
2006-06-17  0:10     ` Grzegorz Kulewski
2006-06-17  0:24       ` Joshua Hudson
2006-06-17  3:35       ` Herbert Poetzl
2006-06-17  9:36         ` Jan Engelhardt
2006-06-17 13:29           ` Herbert Poetzl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060616231227.3DB969AB@localhost.localdomain \
    --to=haveblue@us.ibm.com \
    --cc=herbert@13thfloor.at \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@ftp.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.