Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

io_uring: remove nr_segs recalculation in io_import_kbuf()

io_import_kbuf() recalculates iter->nr_segs to reflect only the bvecs
needed for the requested byte range. This was added to provide an
accurate segment count to bio_iov_bvec_set(), which copied nr_segs to
bio->bi_vcnt for use as a bio split hint.

The previous two patches eliminated this dependency:
- bio_may_need_split() now uses bi_iter instead of bi_vcnt for split
decisions
- bio_iov_bvec_set() no longer copies nr_segs to bi_vcnt

Since nr_segs is no longer used for bio split decisions, the
recalculation loop is unnecessary. The iov_iter already has the correct
bi_size to cap iteration, so an oversized nr_segs is harmless.

Link: https://lkml.org/lkml/2025/4/16/351
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Ming Lei and committed by
Jens Axboe
15f506a7 64186431

-11
-11
io_uring/rsrc.c
··· 1055 1055 1056 1056 iov_iter_bvec(iter, ddir, imu->bvec, imu->nr_bvecs, count); 1057 1057 iov_iter_advance(iter, offset); 1058 - 1059 - if (count < imu->len) { 1060 - const struct bio_vec *bvec = iter->bvec; 1061 - 1062 - len += iter->iov_offset; 1063 - while (len > bvec->bv_len) { 1064 - len -= bvec->bv_len; 1065 - bvec++; 1066 - } 1067 - iter->nr_segs = 1 + bvec - iter->bvec; 1068 - } 1069 1058 return 0; 1070 1059 } 1071 1060