[isilence:rw-dmabuf-v5 7/16] block/blk-merge.c:388 bio_split_io_at() warn: missing unwind goto?

kernel test robot <[email protected]> Sun, 02 Aug 2026 21:33:21 +0800
Newsgroups dev.linux.lists.oe-kbuild
Message-ID <[email protected]>
BCC: [email protected]
CC: [email protected]
TO: Pavel Begunkov <[email protected]>

tree:   https://github.com/isilence/linux rw-dmabuf-v5
head:   830cd62ae8958351a9fcd6d663dea3430921f95b
commit: e26aefbcb383be7092dc76343ce745013e671334 [7/16] block: introduce dma map backed bio type
:::::: branch date: 22 hours ago
:::::: commit date: 22 hours ago
config: i386-randconfig-r072-20260802 (https://download.01.org/0day-ci/archive/20260802/[email protected]/config)
compiler: clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

smatch warnings:
block/blk-merge.c:388 bio_split_io_at() warn: missing unwind goto?
block/blk-merge.c:388 bio_split_io_at() warn: missing unwind goto?
block/blk-merge.c:388 bio_split_io_at() warn: missing unwind goto?

vim +388 block/blk-merge.c

e26aefbcb383be Pavel Begunkov    2025-06-25  344  
dad7758459bc60 Bart Van Assche   2019-08-01  345  /**
fec2e705729dc9 Keith Busch       2025-08-27  346   * bio_split_io_at - check if and where to split a bio
dad7758459bc60 Bart Van Assche   2019-08-01  347   * @bio:  [in] bio to be split
c55ddd9082f757 Christoph Hellwig 2022-07-27  348   * @lim:  [in] queue limits to split based on
dad7758459bc60 Bart Van Assche   2019-08-01  349   * @segs: [out] number of segments in the bio with the first half of the sectors
a85b36375b05f7 Christoph Hellwig 2022-07-27  350   * @max_bytes: [in] maximum number of bytes per bio
fec2e705729dc9 Keith Busch       2025-08-27  351   * @len_align_mask: [in] length alignment mask for each vector
dad7758459bc60 Bart Van Assche   2019-08-01  352   *
b35243a447b9fe Christoph Hellwig 2024-08-26  353   * Find out if @bio needs to be split to fit the queue limits in @lim and a
b35243a447b9fe Christoph Hellwig 2024-08-26  354   * maximum size of @max_bytes.  Returns a negative error number if @bio can't be
b35243a447b9fe Christoph Hellwig 2024-08-26  355   * split, 0 if the bio doesn't have to be split, or a positive sector offset if
b35243a447b9fe Christoph Hellwig 2024-08-26  356   * @bio needs to be split.
dad7758459bc60 Bart Van Assche   2019-08-01  357   */
fec2e705729dc9 Keith Busch       2025-08-27  358  int bio_split_io_at(struct bio *bio, const struct queue_limits *lim,
fec2e705729dc9 Keith Busch       2025-08-27  359  		unsigned *segs, unsigned max_bytes, unsigned len_align_mask)
54efd50bfd873e Kent Overstreet   2015-04-23  360  {
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  361  	struct bio_crypt_ctx *bc = bio_crypt_ctx(bio);
5014c311baa2b2 Jens Axboe        2015-09-02  362  	struct bio_vec bv, bvprv, *bvprvp = NULL;
2f6b2565d43cdb Keith Busch       2025-10-14  363  	unsigned nsegs = 0, bytes = 0, gaps = 0;
54efd50bfd873e Kent Overstreet   2015-04-23  364  	struct bvec_iter iter;
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  365  	unsigned start_align_mask = lim->dma_alignment;
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  366  
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  367  	if (bc) {
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  368  		start_align_mask |= (bc->bc_key->crypto_cfg.data_unit_size - 1);
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  369  		len_align_mask |= (bc->bc_key->crypto_cfg.data_unit_size - 1);
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  370  	}
54efd50bfd873e Kent Overstreet   2015-04-23  371  
e26aefbcb383be Pavel Begunkov    2025-06-25  372  	if (op_is_dmabuf(bio->bi_opf)) {
e26aefbcb383be Pavel Begunkov    2025-06-25  373  		int ret;
e26aefbcb383be Pavel Begunkov    2025-06-25  374  
e26aefbcb383be Pavel Begunkov    2025-06-25  375  		ret = bio_split_io_at_dmabuf(bio, lim, &nsegs, max_bytes,
e26aefbcb383be Pavel Begunkov    2025-06-25  376  					     len_align_mask, start_align_mask);
e26aefbcb383be Pavel Begunkov    2025-06-25  377  		if (ret < 0)
e26aefbcb383be Pavel Begunkov    2025-06-25  378  			return ret;
e26aefbcb383be Pavel Begunkov    2025-06-25  379  		if (!ret)
e26aefbcb383be Pavel Begunkov    2025-06-25  380  			goto out;
e26aefbcb383be Pavel Begunkov    2025-06-25  381  		bytes = ret;
e26aefbcb383be Pavel Begunkov    2025-06-25  382  		goto split;
e26aefbcb383be Pavel Begunkov    2025-06-25  383  	}
e26aefbcb383be Pavel Begunkov    2025-06-25  384  
dcebd755926b0f Ming Lei          2019-02-15  385  	bio_for_each_bvec(bv, bio, iter) {
66e5a11d2ed6d5 Christoph Hellwig 2026-01-09  386  		if (bv.bv_offset & start_align_mask ||
fec2e705729dc9 Keith Busch       2025-08-27  387  		    bv.bv_len & len_align_mask)
fec2e705729dc9 Keith Busch       2025-08-27 @388  			return -EINVAL;
fec2e705729dc9 Keith Busch       2025-08-27  389  
54efd50bfd873e Kent Overstreet   2015-04-23  390  		/*
54efd50bfd873e Kent Overstreet   2015-04-23  391  		 * If the queue doesn't support SG gaps and adding this
54efd50bfd873e Kent Overstreet   2015-04-23  392  		 * offset would create a gap, disallow it.
54efd50bfd873e Kent Overstreet   2015-04-23  393  		 */
2f6b2565d43cdb Keith Busch       2025-10-14  394  		if (bvprvp) {
2f6b2565d43cdb Keith Busch       2025-10-14  395  			if (bvec_gap_to_prev(lim, bvprvp, bv.bv_offset))
54efd50bfd873e Kent Overstreet   2015-04-23  396  				goto split;
2f6b2565d43cdb Keith Busch       2025-10-14  397  			gaps |= bvec_seg_gap(bvprvp, &bv);
2f6b2565d43cdb Keith Busch       2025-10-14  398  		}
54efd50bfd873e Kent Overstreet   2015-04-23  399  
c55ddd9082f757 Christoph Hellwig 2022-07-27  400  		if (nsegs < lim->max_segments &&
67927d22015060 Keith Busch       2022-06-10  401  		    bytes + bv.bv_len <= max_bytes &&
5c5028ee594ce5 Keith Busch       2025-10-20  402  		    bv.bv_offset + bv.bv_len <= lim->max_fast_segment_size) {
708b25b344fd9b Bart Van Assche   2019-08-01  403  			nsegs++;
67927d22015060 Keith Busch       2022-06-10  404  			bytes += bv.bv_len;
c55ddd9082f757 Christoph Hellwig 2022-07-27  405  		} else {
c55ddd9082f757 Christoph Hellwig 2022-07-27  406  			if (bvec_split_segs(lim, &bv, &nsegs, &bytes,
c55ddd9082f757 Christoph Hellwig 2022-07-27  407  					lim->max_segments, max_bytes))
e36f6204288088 Keith Busch       2016-01-12  408  				goto split;
e36f6204288088 Keith Busch       2016-01-12  409  		}
e36f6204288088 Keith Busch       2016-01-12  410  
54efd50bfd873e Kent Overstreet   2015-04-23  411  		bvprv = bv;
578270bfbd2803 Ming Lei          2015-11-24  412  		bvprvp = &bvprv;
54efd50bfd873e Kent Overstreet   2015-04-23  413  	}
54efd50bfd873e Kent Overstreet   2015-04-23  414  
e26aefbcb383be Pavel Begunkov    2025-06-25  415  out:
d627065d884699 Christoph Hellwig 2019-06-06  416  	*segs = nsegs;
2f6b2565d43cdb Keith Busch       2025-10-14  417  	bio->bi_bvec_gap_bit = ffs(gaps);
b35243a447b9fe Christoph Hellwig 2024-08-26  418  	return 0;
54efd50bfd873e Kent Overstreet   2015-04-23  419  split:
b35243a447b9fe Christoph Hellwig 2024-08-26  420  	if (bio->bi_opf & REQ_ATOMIC)
b35243a447b9fe Christoph Hellwig 2024-08-26  421  		return -EINVAL;
b35243a447b9fe Christoph Hellwig 2024-08-26  422  
9cea62b2cbabff Jens Axboe        2023-01-04  423  	/*
9cea62b2cbabff Jens Axboe        2023-01-04  424  	 * We can't sanely support splitting for a REQ_NOWAIT bio. End it
9cea62b2cbabff Jens Axboe        2023-01-04  425  	 * with EAGAIN if splitting is required and return an error pointer.
9cea62b2cbabff Jens Axboe        2023-01-04  426  	 */
b35243a447b9fe Christoph Hellwig 2024-08-26  427  	if (bio->bi_opf & REQ_NOWAIT)
b35243a447b9fe Christoph Hellwig 2024-08-26  428  		return -EAGAIN;
9cea62b2cbabff Jens Axboe        2023-01-04  429  
bdced438acd83a Ming Lei          2015-10-20  430  	*segs = nsegs;
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  431  
67927d22015060 Keith Busch       2022-06-10  432  	/*
67927d22015060 Keith Busch       2022-06-10  433  	 * Individual bvecs might not be logical block aligned. Round down the
67927d22015060 Keith Busch       2022-06-10  434  	 * split size so that each bio is properly block size aligned, even if
67927d22015060 Keith Busch       2022-06-10  435  	 * we do not use the full hardware limits.
fec2e705729dc9 Keith Busch       2025-08-27  436  	 *
fec2e705729dc9 Keith Busch       2025-08-27  437  	 * It is possible to submit a bio that can't be split into a valid io:
fec2e705729dc9 Keith Busch       2025-08-27  438  	 * there may either be too many discontiguous vectors for the max
fec2e705729dc9 Keith Busch       2025-08-27  439  	 * segments limit, or contain virtual boundary gaps without having a
fec2e705729dc9 Keith Busch       2025-08-27  440  	 * valid block sized split. A zero byte result means one of those
fec2e705729dc9 Keith Busch       2025-08-27  441  	 * conditions occured.
67927d22015060 Keith Busch       2022-06-10  442  	 */
7ecd2cd4fae3e8 Christoph Hellwig 2024-11-04  443  	bytes = ALIGN_DOWN(bytes, bio_split_alignment(bio, lim));
fec2e705729dc9 Keith Busch       2025-08-27  444  	if (!bytes)
fec2e705729dc9 Keith Busch       2025-08-27  445  		return -EINVAL;
67927d22015060 Keith Busch       2022-06-10  446  
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  447  	/*
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  448  	 * Bio splitting may cause subtle trouble such as hang when doing sync
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  449  	 * iopoll in direct IO routine. Given performance gain of iopoll for
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  450  	 * big IO can be trival, disable iopoll when split needed.
cc29e1bf0d63f7 Jeffle Xu         2020-11-26  451  	 */
6ce913fe3eee14 Christoph Hellwig 2021-10-12  452  	bio_clear_polled(bio);
2f6b2565d43cdb Keith Busch       2025-10-14  453  	bio->bi_bvec_gap_bit = ffs(gaps);
b35243a447b9fe Christoph Hellwig 2024-08-26  454  	return bytes >> SECTOR_SHIFT;
54efd50bfd873e Kent Overstreet   2015-04-23  455  }
fec2e705729dc9 Keith Busch       2025-08-27  456  EXPORT_SYMBOL_GPL(bio_split_io_at);
54efd50bfd873e Kent Overstreet   2015-04-23  457  

:::::: The code at line 388 was first introduced by commit
:::::: fec2e705729dc93de5399d8b139e4746805c3d81 block: check for valid bio while splitting

:::::: TO: Keith Busch <[email protected]>
:::::: CC: Jens Axboe <[email protected]>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki