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

block: initialize bio issue time in blk_mq_submit_bio()

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>

authored by

Yu Kuai and committed by
Jens Axboe
1f963bdd 1733e888

+8 -8
-6
block/blk-cgroup.h
··· 370 370 if (((d_blkg) = blkg_lookup(css_to_blkcg(pos_css), \ 371 371 (p_blkg)->q))) 372 372 373 - static inline void blkcg_bio_issue_init(struct bio *bio) 374 - { 375 - bio->issue_time_ns = blk_time_get_ns(); 376 - } 377 - 378 373 static inline void blkcg_use_delay(struct blkcg_gq *blkg) 379 374 { 380 375 if (WARN_ON_ONCE(atomic_read(&blkg->use_delay) < 0)) ··· 492 497 static inline struct blkcg_gq *pd_to_blkg(struct blkg_policy_data *pd) { return NULL; } 493 498 static inline void blkg_get(struct blkcg_gq *blkg) { } 494 499 static inline void blkg_put(struct blkcg_gq *blkg) { } 495 - static inline void blkcg_bio_issue_init(struct bio *bio) { } 496 500 static inline void blk_cgroup_bio_start(struct bio *bio) { } 497 501 static inline bool blk_cgroup_mergeable(struct request *rq, struct bio *bio) { return true; } 498 502
-1
block/blk-core.c
··· 728 728 void submit_bio_noacct_nocheck(struct bio *bio) 729 729 { 730 730 blk_cgroup_bio_start(bio); 731 - blkcg_bio_issue_init(bio); 732 731 733 732 if (!bio_flagged(bio, BIO_TRACE_COMPLETION)) { 734 733 trace_block_bio_queue(bio);
-1
block/blk-merge.c
··· 119 119 goto error; 120 120 } 121 121 split->bi_opf |= REQ_NOMERGE; 122 - blkcg_bio_issue_init(split); 123 122 bio_chain(split, bio); 124 123 trace_block_split(split, bio->bi_iter.bi_sector); 125 124 WARN_ON_ONCE(bio_zone_write_plugging(bio));
+8
block/blk-mq.c
··· 396 396 #endif 397 397 } 398 398 399 + static inline void blk_mq_bio_issue_init(struct bio *bio) 400 + { 401 + #ifdef CONFIG_BLK_CGROUP 402 + bio->issue_time_ns = blk_time_get_ns(); 403 + #endif 404 + } 405 + 399 406 static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, 400 407 struct blk_mq_tags *tags, unsigned int tag) 401 408 { ··· 3175 3168 if (!bio_integrity_prep(bio)) 3176 3169 goto queue_exit; 3177 3170 3171 + blk_mq_bio_issue_init(bio); 3178 3172 if (blk_mq_attempt_bio_merge(q, bio, nr_segs)) 3179 3173 goto queue_exit; 3180 3174