|
@@ -395,14 +395,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
|
struct fuse_readpages_data data;
|
|
struct fuse_readpages_data data;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
|
|
+ err = -EIO;
|
|
if (is_bad_inode(inode))
|
|
if (is_bad_inode(inode))
|
|
- return -EIO;
|
|
|
|
|
|
+ goto clean_pages_up;
|
|
|
|
|
|
data.file = file;
|
|
data.file = file;
|
|
data.inode = inode;
|
|
data.inode = inode;
|
|
data.req = fuse_get_req(fc);
|
|
data.req = fuse_get_req(fc);
|
|
|
|
+ err = PTR_ERR(data.req);
|
|
if (IS_ERR(data.req))
|
|
if (IS_ERR(data.req))
|
|
- return PTR_ERR(data.req);
|
|
|
|
|
|
+ goto clean_pages_up;
|
|
|
|
|
|
err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
|
|
err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
|
|
if (!err) {
|
|
if (!err) {
|
|
@@ -412,6 +414,10 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
|
fuse_put_request(fc, data.req);
|
|
fuse_put_request(fc, data.req);
|
|
}
|
|
}
|
|
return err;
|
|
return err;
|
|
|
|
+
|
|
|
|
+clean_pages_up:
|
|
|
|
+ put_pages_list(pages);
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
static size_t fuse_send_write(struct fuse_req *req, struct file *file,
|
|
static size_t fuse_send_write(struct fuse_req *req, struct file *file,
|