diff options
Diffstat (limited to 'fs/fuse')
-rw-r--r-- | fs/fuse/file.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 530b1e804a32..b1873b510350 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -712,7 +712,7 @@ static void fuse_short_read(struct fuse_req *req, struct inode *inode, | |||
712 | } | 712 | } |
713 | } | 713 | } |
714 | 714 | ||
715 | static int fuse_readpage(struct file *file, struct page *page) | 715 | static int fuse_do_readpage(struct file *file, struct page *page) |
716 | { | 716 | { |
717 | struct fuse_io_priv io = { .async = 0, .file = file }; | 717 | struct fuse_io_priv io = { .async = 0, .file = file }; |
718 | struct inode *inode = page->mapping->host; | 718 | struct inode *inode = page->mapping->host; |
@@ -724,10 +724,6 @@ static int fuse_readpage(struct file *file, struct page *page) | |||
724 | u64 attr_ver; | 724 | u64 attr_ver; |
725 | int err; | 725 | int err; |
726 | 726 | ||
727 | err = -EIO; | ||
728 | if (is_bad_inode(inode)) | ||
729 | goto out; | ||
730 | |||
731 | /* | 727 | /* |
732 | * Page writeback can extend beyond the lifetime of the | 728 | * Page writeback can extend beyond the lifetime of the |
733 | * page-cache page, so make sure we read a properly synced | 729 | * 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) | |||
736 | fuse_wait_on_page_writeback(inode, page->index); | 732 | fuse_wait_on_page_writeback(inode, page->index); |
737 | 733 | ||
738 | req = fuse_get_req(fc, 1); | 734 | req = fuse_get_req(fc, 1); |
739 | err = PTR_ERR(req); | ||
740 | if (IS_ERR(req)) | 735 | if (IS_ERR(req)) |
741 | goto out; | 736 | return PTR_ERR(req); |
742 | 737 | ||
743 | attr_ver = fuse_get_attr_version(fc); | 738 | attr_ver = fuse_get_attr_version(fc); |
744 | 739 | ||
@@ -761,6 +756,20 @@ static int fuse_readpage(struct file *file, struct page *page) | |||
761 | } | 756 | } |
762 | 757 | ||
763 | fuse_put_request(fc, req); | 758 | fuse_put_request(fc, req); |
759 | |||
760 | return err; | ||
761 | } | ||
762 | |||
763 | static int fuse_readpage(struct file *file, struct page *page) | ||
764 | { | ||
765 | struct inode *inode = page->mapping->host; | ||
766 | int err; | ||
767 | |||
768 | err = -EIO; | ||
769 | if (is_bad_inode(inode)) | ||
770 | goto out; | ||
771 | |||
772 | err = fuse_do_readpage(file, page); | ||
764 | fuse_invalidate_atime(inode); | 773 | fuse_invalidate_atime(inode); |
765 | out: | 774 | out: |
766 | unlock_page(page); | 775 | unlock_page(page); |