From 80cdac5d8628f3cf4b41be2e37d2b929f3d58d7c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 28 Mar 2024 12:31:10 +0000 Subject: [PATCH] Revert "ANDROID: block: Add support for filesystem requests and small segments" This reverts commit 8a2f432fcb4a6c2deed12afa3d2b76fcb6dc8ada. It conflicts with the LTS merge revert and will be brought back after that is properly merged. Bug: 308663717 Bug: 319125789 Cc: Bart Van Assche Cc: Juan Yescas Change-Id: I764adf995cae6b485d4d98e410c78128a88647e0 Signed-off-by: Greg Kroah-Hartman --- block/blk-merge.c | 8 ++------ block/blk-mq.c | 2 -- block/blk.h | 11 ++++++----- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/block/blk-merge.c b/block/blk-merge.c index 0f62c68b455c..cc7f6a4a255c 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -285,8 +285,7 @@ static struct bio *bio_split_rw(struct bio *bio, struct queue_limits *lim, if (nsegs < lim->max_segments && bytes + bv.bv_len <= max_bytes && bv.bv_offset + bv.bv_len <= PAGE_SIZE) { - /* single-page bvec optimization */ - nsegs += blk_segments(lim, bv.bv_len); + nsegs++; bytes += bv.bv_len; } else { if (bvec_split_segs(lim, &bv, &nsegs, &bytes, @@ -534,10 +533,7 @@ static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio, __blk_segment_map_sg_merge(q, &bvec, &bvprv, sg)) goto next_bvec; - if (bvec.bv_offset + bvec.bv_len <= PAGE_SIZE && - (!blk_queue_sub_page_limits(&q->limits) || - bvec.bv_len <= q->limits.max_segment_size)) - /* single-segment bvec optimization */ + if (bvec.bv_offset + bvec.bv_len <= PAGE_SIZE) nsegs += __blk_bvec_map_sg(bvec, sglist, sg); else nsegs += blk_bvec_map_sg(q, &bvec, sglist, sg); diff --git a/block/blk-mq.c b/block/blk-mq.c index 1440648b22a8..c425c31e5a19 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2951,8 +2951,6 @@ void blk_mq_submit_bio(struct bio *bio) bio = __bio_split_to_limits(bio, &q->limits, &nr_segs); if (!bio) return; - } else if (bio->bi_vcnt == 1) { - nr_segs = blk_segments(&q->limits, bio->bi_io_vec[0].bv_len); } if (!bio_integrity_prep(bio)) diff --git a/block/blk.h b/block/blk.h index 82143bf38064..f6e59cd7cfa1 100644 --- a/block/blk.h +++ b/block/blk.h @@ -337,12 +337,13 @@ static inline bool bio_may_exceed_limits(struct bio *bio, } /* - * Check whether bio splitting should be performed. This check may - * trigger the bio splitting code even if splitting is not necessary. + * All drivers must accept single-segments bios that are <= PAGE_SIZE. + * This is a quick and dirty check that relies on the fact that + * bi_io_vec[0] is always valid if a bio has data. The check might + * lead to occasional false negatives when bios are cloned, but compared + * to the performance impact of cloned bios themselves the loop below + * doesn't matter anyway. */ - if (blk_queue_sub_page_limits(lim) && bio->bi_io_vec && - bio->bi_io_vec->bv_len > lim->max_segment_size) - return true; return lim->chunk_sectors || bio->bi_vcnt != 1 || bio->bi_io_vec->bv_len + bio->bi_io_vec->bv_offset > PAGE_SIZE; }