include/linux/fs.h | 2 ++
5 files changed, 38 insertions(+), 5 deletions(-)
-Index: linux-3.6-rc7-master/Documentation/filesystems/Locking
-===================================================================
---- linux-3.6-rc7-master.orig/Documentation/filesystems/Locking 2012-09-28 13:36:40.000000000 +0200
-+++ linux-3.6-rc7-master/Documentation/filesystems/Locking 2012-09-28 13:36:47.000000000 +0200
-@@ -64,6 +64,7 @@ d_manage: no no yes (ref-walk) maybe
- int (*atomic_open)(struct inode *, struct dentry *,
+--- a/Documentation/filesystems/Locking
++++ b/Documentation/filesystems/Locking
+@@ -66,6 +66,7 @@ d_manage: no no yes (ref-walk) maybe
struct file *, unsigned open_flag,
umode_t create_mode, int *opened);
+ int (*tmpfile) (struct inode *, struct dentry *, umode_t);
+ int (*dentry_open)(struct dentry *, struct file *, const struct cred *);
locking rules:
all may block
-@@ -92,6 +93,7 @@ removexattr: yes
- fiemap: no
+@@ -93,6 +94,7 @@ removexattr: yes
update_time: no
atomic_open: yes
+ tmpfile: no
+dentry_open: no
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
victim.
-Index: linux-3.6-rc7-master/Documentation/filesystems/vfs.txt
-===================================================================
---- linux-3.6-rc7-master.orig/Documentation/filesystems/vfs.txt 2012-09-28 13:36:40.000000000 +0200
-+++ linux-3.6-rc7-master/Documentation/filesystems/vfs.txt 2012-09-28 13:36:47.000000000 +0200
-@@ -363,6 +363,7 @@ struct inode_operations {
- int (*atomic_open)(struct inode *, struct dentry *,
- struct file *, unsigned open_flag,
- umode_t create_mode, int *opened);
+--- a/Documentation/filesystems/vfs.txt
++++ b/Documentation/filesystems/vfs.txt
+@@ -362,6 +362,7 @@ struct inode_operations {
+ int (*atomic_open)(struct inode *, struct dentry *, struct file *,
+ unsigned open_flag, umode_t create_mode, int *opened);
+ int (*tmpfile) (struct inode *, struct dentry *, umode_t);
+ int (*dentry_open)(struct dentry *, struct file *, const struct cred *);
};
Again, all methods are called without any locks being held, unless
-@@ -692,6 +693,12 @@ struct address_space_operations {
+@@ -681,6 +682,12 @@ struct address_space_operations {
but instead uses bmap to find out where the blocks in the file
are and uses those addresses directly.
invalidatepage: If a page has PagePrivate set, then invalidatepage
will be called when part or all of the page is to be removed
-Index: linux-3.6-rc7-master/fs/namei.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/namei.c 2012-09-28 13:36:40.000000000 +0200
-+++ linux-3.6-rc7-master/fs/namei.c 2012-09-28 13:36:47.000000000 +0200
-@@ -2870,9 +2870,12 @@ static int do_last(struct nameidata *nd,
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -2915,9 +2915,12 @@ static int do_last(struct nameidata *nd,
error = may_open(&nd->path, acc_mode, open_flag);
if (error)
goto out;
if (error == -EOPENSTALE)
goto stale_open;
goto out;
-Index: linux-3.6-rc7-master/fs/open.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/open.c 2012-09-28 13:36:40.000000000 +0200
-+++ linux-3.6-rc7-master/fs/open.c 2012-09-28 13:36:47.000000000 +0200
-@@ -787,8 +787,7 @@ struct file *dentry_open(const struct pa
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -800,8 +800,7 @@ struct file *dentry_open(const struct pa
f = get_empty_filp();
if (!IS_ERR(f)) {
- f->f_flags = flags;
+ f->f_flags = flags;
- f->f_path = *path;
- error = do_dentry_open(f, NULL, cred);
+ error = vfs_open(path, f, cred);
if (!error) {
- /* from now on we need fput() to dispose of f */
+ /* from now on we need fput() to dispose of f */
error = open_check_o_direct(f);
-@@ -803,6 +802,26 @@ struct file *dentry_open(const struct pa
+@@ -818,6 +817,26 @@ struct file *dentry_open(const struct pa
}
EXPORT_SYMBOL(dentry_open);
static inline int build_open_flags(int flags, umode_t mode, struct open_flags *op)
{
int lookup_flags = 0;
-Index: linux-3.6-rc7-master/include/linux/fs.h
-===================================================================
---- linux-3.6-rc7-master.orig/include/linux/fs.h 2012-09-28 13:36:40.000000000 +0200
-+++ linux-3.6-rc7-master/include/linux/fs.h 2012-09-28 13:36:47.000000000 +0200
-@@ -1573,6 +1573,7 @@ struct inode_operations {
- int (*atomic_open)(struct inode *, struct dentry *,
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1585,6 +1585,7 @@ struct inode_operations {
struct file *, unsigned open_flag,
umode_t create_mode, int *opened);
+ int (*tmpfile) (struct inode *, struct dentry *, umode_t);
+ int (*dentry_open)(struct dentry *, struct file *, const struct cred *);
} ____cacheline_aligned;
ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
-@@ -2211,6 +2212,7 @@ extern long do_sys_open(int dfd, const c
+@@ -2019,6 +2020,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);