blk-cgroup: move rcu locking from blkcg_bio_issue_check to blk_throtl_bio

The only thing in blkcg_bio_issue_check that needs to be under
rcu_read_lock is blk_throtl_bio, so move the locking there.

Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Christoph Hellwig 2020-06-27 09:31:57 +02:00 committed by Jens Axboe
parent 7582f30cc9
commit 93b8063804
2 changed files with 2 additions and 3 deletions

View File

@ -2168,7 +2168,7 @@ bool blk_throtl_bio(struct request_queue *q, struct blkcg_gq *blkg,
bool throttled = false; bool throttled = false;
struct throtl_data *td = tg->td; struct throtl_data *td = tg->td;
WARN_ON_ONCE(!rcu_read_lock_held()); rcu_read_lock();
/* see throtl_charge_bio() */ /* see throtl_charge_bio() */
if (bio_flagged(bio, BIO_THROTTLED)) if (bio_flagged(bio, BIO_THROTTLED))
@ -2273,6 +2273,7 @@ out:
if (throttled || !td->track_bio_latency) if (throttled || !td->track_bio_latency)
bio->bi_issue.value |= BIO_ISSUE_THROTL_SKIP_LATENCY; bio->bi_issue.value |= BIO_ISSUE_THROTL_SKIP_LATENCY;
#endif #endif
rcu_read_unlock();
return throttled; return throttled;
} }

View File

@ -546,7 +546,6 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q,
struct blkcg_gq *blkg = bio->bi_blkg; struct blkcg_gq *blkg = bio->bi_blkg;
bool throtl = false; bool throtl = false;
rcu_read_lock();
throtl = blk_throtl_bio(q, blkg, bio); throtl = blk_throtl_bio(q, blkg, bio);
if (!throtl) { if (!throtl) {
struct blkg_iostat_set *bis; struct blkg_iostat_set *bis;
@ -582,7 +581,6 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q,
blkcg_bio_issue_init(bio); blkcg_bio_issue_init(bio);
rcu_read_unlock();
return !throtl; return !throtl;
} }