diff options
Diffstat (limited to 'fs/fuse/file.c')
| -rw-r--r-- | fs/fuse/file.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 63614ed16336..5c4fcd1dbf59 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
| @@ -395,14 +395,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
| 395 | struct fuse_readpages_data data; | 395 | struct fuse_readpages_data data; |
| 396 | int err; | 396 | int err; |
| 397 | 397 | ||
| 398 | err = -EIO; | ||
| 398 | if (is_bad_inode(inode)) | 399 | if (is_bad_inode(inode)) |
| 399 | return -EIO; | 400 | goto clean_pages_up; |
| 400 | 401 | ||
| 401 | data.file = file; | 402 | data.file = file; |
| 402 | data.inode = inode; | 403 | data.inode = inode; |
| 403 | data.req = fuse_get_req(fc); | 404 | data.req = fuse_get_req(fc); |
| 405 | err = PTR_ERR(data.req); | ||
| 404 | if (IS_ERR(data.req)) | 406 | if (IS_ERR(data.req)) |
| 405 | return PTR_ERR(data.req); | 407 | goto clean_pages_up; |
| 406 | 408 | ||
| 407 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); | 409 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); |
| 408 | if (!err) { | 410 | if (!err) { |
| @@ -412,6 +414,10 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
| 412 | fuse_put_request(fc, data.req); | 414 | fuse_put_request(fc, data.req); |
| 413 | } | 415 | } |
| 414 | return err; | 416 | return err; |
| 417 | |||
| 418 | clean_pages_up: | ||
| 419 | put_pages_list(pages); | ||
| 420 | return err; | ||
| 415 | } | 421 | } |
| 416 | 422 | ||
| 417 | static size_t fuse_send_write(struct fuse_req *req, struct file *file, | 423 | static size_t fuse_send_write(struct fuse_req *req, struct file *file, |
