mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
fuse: convert retrieves to use folios
Convert retrieve requests to use folios instead of pages. No functional changes. Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
ac1cf6e3bb
commit
448895df03
|
|
@ -1728,7 +1728,7 @@ static void fuse_retrieve_end(struct fuse_mount *fm, struct fuse_args *args,
|
|||
struct fuse_retrieve_args *ra =
|
||||
container_of(args, typeof(*ra), ap.args);
|
||||
|
||||
release_pages(ra->ap.pages, ra->ap.num_pages);
|
||||
release_pages(ra->ap.folios, ra->ap.num_folios);
|
||||
kfree(ra);
|
||||
}
|
||||
|
||||
|
|
@ -1742,7 +1742,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
|
|||
unsigned int num;
|
||||
unsigned int offset;
|
||||
size_t total_len = 0;
|
||||
unsigned int num_pages;
|
||||
unsigned int num_pages, cur_pages = 0;
|
||||
struct fuse_conn *fc = fm->fc;
|
||||
struct fuse_retrieve_args *ra;
|
||||
size_t args_size = sizeof(*ra);
|
||||
|
|
@ -1761,15 +1761,16 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
|
|||
num_pages = (num + offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
num_pages = min(num_pages, fc->max_pages);
|
||||
|
||||
args_size += num_pages * (sizeof(ap->pages[0]) + sizeof(ap->descs[0]));
|
||||
args_size += num_pages * (sizeof(ap->folios[0]) + sizeof(ap->folio_descs[0]));
|
||||
|
||||
ra = kzalloc(args_size, GFP_KERNEL);
|
||||
if (!ra)
|
||||
return -ENOMEM;
|
||||
|
||||
ap = &ra->ap;
|
||||
ap->pages = (void *) (ra + 1);
|
||||
ap->descs = (void *) (ap->pages + num_pages);
|
||||
ap->folios = (void *) (ra + 1);
|
||||
ap->folio_descs = (void *) (ap->folios + num_pages);
|
||||
ap->uses_folios = true;
|
||||
|
||||
args = &ap->args;
|
||||
args->nodeid = outarg->nodeid;
|
||||
|
|
@ -1780,7 +1781,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
|
|||
|
||||
index = outarg->offset >> PAGE_SHIFT;
|
||||
|
||||
while (num && ap->num_pages < num_pages) {
|
||||
while (num && cur_pages < num_pages) {
|
||||
struct folio *folio;
|
||||
unsigned int this_num;
|
||||
|
||||
|
|
@ -1789,10 +1790,11 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
|
|||
break;
|
||||
|
||||
this_num = min_t(unsigned, num, PAGE_SIZE - offset);
|
||||
ap->pages[ap->num_pages] = &folio->page;
|
||||
ap->descs[ap->num_pages].offset = offset;
|
||||
ap->descs[ap->num_pages].length = this_num;
|
||||
ap->num_pages++;
|
||||
ap->folios[ap->num_folios] = folio;
|
||||
ap->folio_descs[ap->num_folios].offset = offset;
|
||||
ap->folio_descs[ap->num_folios].length = this_num;
|
||||
ap->num_folios++;
|
||||
cur_pages++;
|
||||
|
||||
offset = 0;
|
||||
num -= this_num;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user