[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20070927185210.FD980C90@kernel>
Date: Thu, 27 Sep 2007 11:52:10 -0700
From: Dave Hansen <haveblue@...ibm.com>
To: linux-kernel@...r.kernel.org
Cc: miklos@...redi.hu, hch@...radead.org,
Dave Hansen <haveblue@...ibm.com>
Subject: [RFC][PATCH 1/5] get mount write in __dentry_open()
The first three patches here fix actual bugs. I think
the last two will reduce the chance for any future bugs
to creep in. RFC for now.
--
This is a bug fix for the r/o bind mount patch set.
We need to ensure taking a mnt write on the mnt
referenced by any new struct file.
---
lxc-dave/fs/open.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff -puN fs/open.c~get-write-in-__dentry_open fs/open.c
--- lxc/fs/open.c~get-write-in-__dentry_open 2007-09-27 11:51:31.000000000 -0700
+++ lxc-dave/fs/open.c 2007-09-27 11:51:31.000000000 -0700
@@ -778,9 +778,15 @@ static struct file *__dentry_open(struct
FMODE_PREAD | FMODE_PWRITE;
inode = dentry->d_inode;
if (f->f_mode & FMODE_WRITE) {
- error = get_write_access(inode);
+ error = mnt_want_write(mnt);
if (error)
goto cleanup_file;
+
+ error = get_write_access(inode);
+ if (error) {
+ mnt_drop_write(mnt);
+ goto cleanup_file;
+ }
}
f->f_mapping = inode->i_mapping;
@@ -820,8 +826,10 @@ static struct file *__dentry_open(struct
cleanup_all:
fops_put(f->f_op);
- if (f->f_mode & FMODE_WRITE)
+ if (f->f_mode & FMODE_WRITE) {
put_write_access(inode);
+ mnt_drop_write(mnt);
+ }
file_kill(f);
f->f_path.dentry = NULL;
f->f_path.mnt = NULL;
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists