From: Pavel Emelyanov <xe...@openvz.org>

When writeback is ON every writeable file should be in per-inode write list,
not only mmap-ed ones. Thus introduce a helper for this linkage.

Signed-off-by: Maxim Patlasov <mpatla...@parallels.com>
Signed-off-by: Pavel Emelyanov <xe...@openvz.org>
---
 fs/fuse/file.c |   33 +++++++++++++++++++--------------
 1 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 35f2810..cc858ee 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -171,6 +171,22 @@ int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct 
file *file,
 }
 EXPORT_SYMBOL_GPL(fuse_do_open);
 
+static void fuse_link_write_file(struct file *file)
+{
+       struct inode *inode = file_inode(file);
+       struct fuse_conn *fc = get_fuse_conn(inode);
+       struct fuse_inode *fi = get_fuse_inode(inode);
+       struct fuse_file *ff = file->private_data;
+       /*
+        * file may be written through mmap, so chain it onto the
+        * inodes's write_file list
+        */
+       spin_lock(&fc->lock);
+       if (list_empty(&ff->write_entry))
+               list_add(&ff->write_entry, &fi->write_files);
+       spin_unlock(&fc->lock);
+}
+
 void fuse_finish_open(struct inode *inode, struct file *file)
 {
        struct fuse_file *ff = file->private_data;
@@ -1615,20 +1631,9 @@ static const struct vm_operations_struct 
fuse_file_vm_ops = {
 
 static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
-       if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE)) {
-               struct inode *inode = file_inode(file);
-               struct fuse_conn *fc = get_fuse_conn(inode);
-               struct fuse_inode *fi = get_fuse_inode(inode);
-               struct fuse_file *ff = file->private_data;
-               /*
-                * file may be written through mmap, so chain it onto the
-                * inodes's write_file list
-                */
-               spin_lock(&fc->lock);
-               if (list_empty(&ff->write_entry))
-                       list_add(&ff->write_entry, &fi->write_files);
-               spin_unlock(&fc->lock);
-       }
+       if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE))
+               fuse_link_write_file(file);
+
        file_accessed(file);
        vma->vm_ops = &fuse_file_vm_ops;
        return 0;

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to