blk-cgroup: move rcu locking from blkcg_bio_issue_check to blk_throtl_bio
authorChristoph Hellwig <hch@lst.de>
Sat, 27 Jun 2020 07:31:57 +0000 (09:31 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 29 Jun 2020 15:09:08 +0000 (09:09 -0600)
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>
block/blk-throttle.c
include/linux/blk-cgroup.h

index 209fdd8..ac00834 100644 (file)
@@ -2168,7 +2168,7 @@ bool blk_throtl_bio(struct request_queue *q, struct blkcg_gq *blkg,
        bool throttled = false;
        struct throtl_data *td = tg->td;
 
-       WARN_ON_ONCE(!rcu_read_lock_held());
+       rcu_read_lock();
 
        /* see throtl_charge_bio() */
        if (bio_flagged(bio, BIO_THROTTLED))
@@ -2273,6 +2273,7 @@ out:
        if (throttled || !td->track_bio_latency)
                bio->bi_issue.value |= BIO_ISSUE_THROTL_SKIP_LATENCY;
 #endif
+       rcu_read_unlock();
        return throttled;
 }
 
index 8e86b59..8ab043c 100644 (file)
@@ -546,7 +546,6 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q,
        struct blkcg_gq *blkg = bio->bi_blkg;
        bool throtl = false;
 
-       rcu_read_lock();
        throtl = blk_throtl_bio(q, blkg, bio);
        if (!throtl) {
                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);
 
-       rcu_read_unlock();
        return !throtl;
 }