mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
f2fs: avoid splitting bio when reading multiple pages
When fewer pages are read, nr_pages may be smaller than nr_cpages. Due to the nr_vecs limit, the compressed pages will be split into multiple bios and then merged at the block level. In this case, nr_cpages should be used to pre-allocate bvecs. To handle this case, align max_nr_pages to cluster_size, which should be enough for all compressed pages. Signed-off-by: Jianan Huang <huangjianan@xiaomi.com> Signed-off-by: Sheng Yong <shengyong1@xiaomi.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
e23ab8028d
commit
185f203a69
|
|
@ -2303,7 +2303,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
|
|||
}
|
||||
|
||||
if (!bio) {
|
||||
bio = f2fs_grab_read_bio(inode, blkaddr, nr_pages,
|
||||
bio = f2fs_grab_read_bio(inode, blkaddr, nr_pages - i,
|
||||
f2fs_ra_op_flags(rac),
|
||||
folio->index, for_write);
|
||||
if (IS_ERR(bio)) {
|
||||
|
|
@ -2376,6 +2376,14 @@ static int f2fs_mpage_readpages(struct inode *inode,
|
|||
unsigned max_nr_pages = nr_pages;
|
||||
int ret = 0;
|
||||
|
||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||
if (f2fs_compressed_file(inode)) {
|
||||
index = rac ? readahead_index(rac) : folio->index;
|
||||
max_nr_pages = round_up(index + nr_pages, cc.cluster_size) -
|
||||
round_down(index, cc.cluster_size);
|
||||
}
|
||||
#endif
|
||||
|
||||
map.m_pblk = 0;
|
||||
map.m_lblk = 0;
|
||||
map.m_len = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user