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: Maxim Patlasov <MPatlasov@parallels.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
Родитель
e7cc133c37
Коммит
482fce55d2
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче