]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
block: initialize bio issue time in blk_mq_submit_bio()
authorYu Kuai <yukuai3@huawei.com>
Wed, 10 Sep 2025 06:30:42 +0000 (14:30 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 10 Sep 2025 11:23:45 +0000 (05:23 -0600)
bio->issue_time_ns is only used by blk-iolatency, which can only be
enabled for rq-based disk, hence it's not necessary to initialize
the time for bio-based disk.

Meanwhile, if bio is split by blk_crypto_fallback_split_bio_if_needed(),
the issue time is not initialized for new split bio, this can be fixed
as well.

Noted the next patch will optimize better that bio issue time will
only be used when blk-iolatency is really enabled by the disk.

Fixes: 488f6682c832 ("block: blk-crypto-fallback for Inline Encryption")
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.h
block/blk-core.c
block/blk-merge.c
block/blk-mq.c

index 8328427e31657443910b835e22a932510aa403c4..1cce3294634d187cd3cfe205deed8c639fad137a 100644 (file)
@@ -370,11 +370,6 @@ static inline void blkg_put(struct blkcg_gq *blkg)
                if (((d_blkg) = blkg_lookup(css_to_blkcg(pos_css),      \
                                            (p_blkg)->q)))
 
-static inline void blkcg_bio_issue_init(struct bio *bio)
-{
-       bio->issue_time_ns = blk_time_get_ns();
-}
-
 static inline void blkcg_use_delay(struct blkcg_gq *blkg)
 {
        if (WARN_ON_ONCE(atomic_read(&blkg->use_delay) < 0))
@@ -497,7 +492,6 @@ static inline struct blkg_policy_data *blkg_to_pd(struct blkcg_gq *blkg,
 static inline struct blkcg_gq *pd_to_blkg(struct blkg_policy_data *pd) { return NULL; }
 static inline void blkg_get(struct blkcg_gq *blkg) { }
 static inline void blkg_put(struct blkcg_gq *blkg) { }
-static inline void blkcg_bio_issue_init(struct bio *bio) { }
 static inline void blk_cgroup_bio_start(struct bio *bio) { }
 static inline bool blk_cgroup_mergeable(struct request *rq, struct bio *bio) { return true; }
 
index 4201504158a17e0a8a188e87ae096e0067c487f1..83c262a3dfd9cf666e1970f7e486ab896d5f10db 100644 (file)
@@ -728,7 +728,6 @@ static void __submit_bio_noacct_mq(struct bio *bio)
 void submit_bio_noacct_nocheck(struct bio *bio)
 {
        blk_cgroup_bio_start(bio);
-       blkcg_bio_issue_init(bio);
 
        if (!bio_flagged(bio, BIO_TRACE_COMPLETION)) {
                trace_block_bio_queue(bio);
index cffc0fe48d8a3b6bc25e082c19bc18b2919124bf..354a3070e6a189b9f62f252c1e737c1e8661b56d 100644 (file)
@@ -119,7 +119,6 @@ static struct bio *bio_submit_split(struct bio *bio, int split_sectors)
                        goto error;
                }
                split->bi_opf |= REQ_NOMERGE;
-               blkcg_bio_issue_init(split);
                bio_chain(split, bio);
                trace_block_split(split, bio->bi_iter.bi_sector);
                WARN_ON_ONCE(bio_zone_write_plugging(bio));
index 9abcd4c5d6a20ee80715dbaf26bd6b1f4555f1d7..2c0c8ead70806935c678306f871aa14a9dd75292 100644 (file)
@@ -396,6 +396,13 @@ static inline void blk_mq_rq_time_init(struct request *rq, u64 alloc_time_ns)
 #endif
 }
 
+static inline void blk_mq_bio_issue_init(struct bio *bio)
+{
+#ifdef CONFIG_BLK_CGROUP
+       bio->issue_time_ns = blk_time_get_ns();
+#endif
+}
+
 static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
                struct blk_mq_tags *tags, unsigned int tag)
 {
@@ -3168,6 +3175,7 @@ void blk_mq_submit_bio(struct bio *bio)
        if (!bio_integrity_prep(bio))
                goto queue_exit;
 
+       blk_mq_bio_issue_init(bio);
        if (blk_mq_attempt_bio_merge(q, bio, nr_segs))
                goto queue_exit;