diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c index 6dabe73ad790..a00787df2507 100644 --- a/fs/gfs2/lops.c +++ b/fs/gfs2/lops.c @@ -514,6 +514,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) int ret = 0; struct bio *bio = NULL; struct folio *folio = NULL; + bool bio_chained = false; bool done = false; errseq_t since; @@ -537,7 +538,8 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) off = 0; } - if (bio && (off || block < blocks_submitted + max_blocks)) { + if (bio && (off || (!bio_chained && + block < blocks_submitted + max_blocks))) { sector_t sector = dblock << sdp->sd_fsb2bb_shift; if (bio_end_sector(bio) == sector) { @@ -550,6 +552,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) bio = gfs2_chain_bio(bio, blocks, sector, REQ_OP_READ); + bio_chained = true; goto add_block_to_new_bio; } } @@ -561,6 +564,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) bio = gfs2_log_alloc_bio(sdp, dblock, gfs2_end_log_read, REQ_OP_READ); + bio_chained = false; add_block_to_new_bio: bio_add_folio_nofail(bio, folio, bsize, off); block_added: