Commit 482fce55 authored by Maxim Patlasov's avatar Maxim Patlasov Committed by Miklos Szeredi
Browse files

fuse: restructure fuse_readpage()



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: default avatarMaxim Patlasov <MPatlasov@parallels.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
parent e7cc133c
Loading
Loading
Loading
Loading
+16 −7
Original line number Original line Diff line number Diff line
@@ -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 fuse_io_priv io = { .async = 0, .file = file };
	struct inode *inode = page->mapping->host;
	struct inode *inode = page->mapping->host;
@@ -724,10 +724,6 @@ static int fuse_readpage(struct file *file, struct page *page)
	u64 attr_ver;
	u64 attr_ver;
	int err;
	int err;


	err = -EIO;
	if (is_bad_inode(inode))
		goto out;

	/*
	/*
	 * Page writeback can extend beyond the lifetime of the
	 * Page writeback can extend beyond the lifetime of the
	 * page-cache page, so make sure we read a properly synced
	 * 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);
	fuse_wait_on_page_writeback(inode, page->index);


	req = fuse_get_req(fc, 1);
	req = fuse_get_req(fc, 1);
	err = PTR_ERR(req);
	if (IS_ERR(req))
	if (IS_ERR(req))
		goto out;
		return PTR_ERR(req);


	attr_ver = fuse_get_attr_version(fc);
	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);
	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);
	fuse_invalidate_atime(inode);
 out:
 out:
	unlock_page(page);
	unlock_page(page);