mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-26 13:47:26 +00:00
fuse: refactor fuse_fill_write_pages()
Refactor the logic in fuse_fill_write_pages() for copying out write data. This will make the future change for supporting large folios for writes easier. No functional changes. Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Bernd Schubert <bschubert@ddn.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
3568a95693
commit
63c69ad3d1
@ -1132,21 +1132,21 @@ static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia,
|
||||
struct fuse_args_pages *ap = &ia->ap;
|
||||
struct fuse_conn *fc = get_fuse_conn(mapping->host);
|
||||
unsigned offset = pos & (PAGE_SIZE - 1);
|
||||
unsigned int nr_pages = 0;
|
||||
size_t count = 0;
|
||||
int err;
|
||||
unsigned int num;
|
||||
int err = 0;
|
||||
|
||||
num = min(iov_iter_count(ii), fc->max_write);
|
||||
num = min(num, max_pages << PAGE_SHIFT);
|
||||
|
||||
ap->args.in_pages = true;
|
||||
ap->descs[0].offset = offset;
|
||||
|
||||
do {
|
||||
while (num) {
|
||||
size_t tmp;
|
||||
struct folio *folio;
|
||||
pgoff_t index = pos >> PAGE_SHIFT;
|
||||
size_t bytes = min_t(size_t, PAGE_SIZE - offset,
|
||||
iov_iter_count(ii));
|
||||
|
||||
bytes = min_t(size_t, bytes, fc->max_write - count);
|
||||
unsigned bytes = min(PAGE_SIZE - offset, num);
|
||||
|
||||
again:
|
||||
folio = __filemap_get_folio(mapping, index, FGP_WRITEBEGIN,
|
||||
@ -1178,14 +1178,13 @@ static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia,
|
||||
goto again;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
ap->folios[ap->num_folios] = folio;
|
||||
ap->descs[ap->num_folios].length = tmp;
|
||||
ap->num_folios++;
|
||||
nr_pages++;
|
||||
|
||||
count += tmp;
|
||||
pos += tmp;
|
||||
num -= tmp;
|
||||
offset += tmp;
|
||||
if (offset == PAGE_SIZE)
|
||||
offset = 0;
|
||||
@ -1200,10 +1199,9 @@ static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia,
|
||||
ia->write.folio_locked = true;
|
||||
break;
|
||||
}
|
||||
if (!fc->big_writes)
|
||||
if (!fc->big_writes || offset != 0)
|
||||
break;
|
||||
} while (iov_iter_count(ii) && count < fc->max_write &&
|
||||
nr_pages < max_pages && offset == 0);
|
||||
}
|
||||
|
||||
return count > 0 ? count : err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user