fuse: restructure fuse_readpage()
authorMaxim Patlasov <MPatlasov@parallels.com>
Thu, 10 Oct 2013 13:11:25 +0000 (17:11 +0400)
committerMiklos Szeredi <mszeredi@suse.cz>
Wed, 2 Apr 2014 13:38:49 +0000 (15:38 +0200)
Move the code filling and sending read request to a separate function. Future
patches will use it for .write_begin -- partial modification of a page
requires reading the page from the storage very similarly to what fuse_readpage
does.

Signed-off-by: Maxim Patlasov <MPatlasov@parallels.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
fs/fuse/file.c

index 530b1e804a327392725a8a15c6d0a367bcdfc5c1..b1873b510350bd88343c370938619de861a9c8de 100644 (file)
@@ -712,7 +712,7 @@ static void fuse_short_read(struct fuse_req *req, struct inode *inode,
        }
 }
 
-static int fuse_readpage(struct file *file, struct page *page)
+static int fuse_do_readpage(struct file *file, struct page *page)
 {
        struct fuse_io_priv io = { .async = 0, .file = file };
        struct inode *inode = page->mapping->host;
@@ -724,10 +724,6 @@ static int fuse_readpage(struct file *file, struct page *page)
        u64 attr_ver;
        int err;
 
-       err = -EIO;
-       if (is_bad_inode(inode))
-               goto out;
-
        /*
         * Page writeback can extend beyond the lifetime of the
         * page-cache page, so make sure we read a properly synced
@@ -736,9 +732,8 @@ static int fuse_readpage(struct file *file, struct page *page)
        fuse_wait_on_page_writeback(inode, page->index);
 
        req = fuse_get_req(fc, 1);
-       err = PTR_ERR(req);
        if (IS_ERR(req))
-               goto out;
+               return PTR_ERR(req);
 
        attr_ver = fuse_get_attr_version(fc);
 
@@ -761,6 +756,20 @@ static int fuse_readpage(struct file *file, struct page *page)
        }
 
        fuse_put_request(fc, req);
+
+       return err;
+}
+
+static int fuse_readpage(struct file *file, struct page *page)
+{
+       struct inode *inode = page->mapping->host;
+       int err;
+
+       err = -EIO;
+       if (is_bad_inode(inode))
+               goto out;
+
+       err = fuse_do_readpage(file, page);
        fuse_invalidate_atime(inode);
  out:
        unlock_page(page);