Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 352889
b: refs/heads/master
c: f8dbdf8
h: refs/heads/master
i:
  352887: 5944a11
v: v3
  • Loading branch information
Maxim Patlasov authored and Miklos Szeredi committed Jan 24, 2013
1 parent eb0ba0b commit da52e4f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4d53dc99baf139e4fa0d395f7658032cc2eb3297
refs/heads/master: f8dbdf81821b5ab4c5e86e7b2bd7edb892c159c2
16 changes: 14 additions & 2 deletions trunk/fs/fuse/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,7 @@ struct fuse_fill_data {
struct fuse_req *req;
struct file *file;
struct inode *inode;
unsigned nr_pages;
};

static int fuse_readpages_fill(void *_data, struct page *page)
Expand All @@ -656,16 +657,25 @@ static int fuse_readpages_fill(void *_data, struct page *page)
(req->num_pages == FUSE_MAX_PAGES_PER_REQ ||
(req->num_pages + 1) * PAGE_CACHE_SIZE > fc->max_read ||
req->pages[req->num_pages - 1]->index + 1 != page->index)) {
int nr_alloc = min_t(unsigned, data->nr_pages,
FUSE_MAX_PAGES_PER_REQ);
fuse_send_readpages(req, data->file);
data->req = req = fuse_get_req(fc, FUSE_MAX_PAGES_PER_REQ);
data->req = req = fuse_get_req(fc, nr_alloc);
if (IS_ERR(req)) {
unlock_page(page);
return PTR_ERR(req);
}
}

if (WARN_ON(req->num_pages >= req->max_pages)) {
fuse_put_request(fc, req);
return -EIO;
}

page_cache_get(page);
req->pages[req->num_pages] = page;
req->num_pages++;
data->nr_pages--;
return 0;
}

Expand All @@ -676,14 +686,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
struct fuse_conn *fc = get_fuse_conn(inode);
struct fuse_fill_data data;
int err;
int nr_alloc = min_t(unsigned, nr_pages, FUSE_MAX_PAGES_PER_REQ);

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

data.file = file;
data.inode = inode;
data.req = fuse_get_req(fc, FUSE_MAX_PAGES_PER_REQ);
data.req = fuse_get_req(fc, nr_alloc);
data.nr_pages = nr_pages;
err = PTR_ERR(data.req);
if (IS_ERR(data.req))
goto out;
Expand Down

0 comments on commit da52e4f

Please sign in to comment.