OSDN Git Service

blk-cgroup: Remove unnecessary rcu_read_lock/unlock()
authorFanjun Kong <bh1scw@gmail.com>
Mon, 16 May 2022 17:39:30 +0000 (01:39 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 17 May 2022 12:12:23 +0000 (06:12 -0600)
spin_lock_irq/spin_unlock_irq contains preempt_disable/enable().
Which can serve as RCU read-side critical region, so remove
rcu_read_lock/unlock().

Signed-off-by: Fanjun Kong <bh1scw@gmail.com>
Reviewed-by: Muchun Song <songmuchun@bytedance.com>
Acked-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20220516173930.159535-1-bh1scw@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.c

index 204442f..0676cf7 100644 (file)
@@ -1278,14 +1278,13 @@ int blkcg_init_queue(struct request_queue *q)
        preloaded = !radix_tree_preload(GFP_KERNEL);
 
        /* Make sure the root blkg exists. */
-       rcu_read_lock();
+       /* spin_lock_irq can serve as RCU read-side critical section. */
        spin_lock_irq(&q->queue_lock);
        blkg = blkg_create(&blkcg_root, q, new_blkg);
        if (IS_ERR(blkg))
                goto err_unlock;
        q->root_blkg = blkg;
        spin_unlock_irq(&q->queue_lock);
-       rcu_read_unlock();
 
        if (preloaded)
                radix_tree_preload_end();
@@ -1311,7 +1310,6 @@ err_destroy_all:
        return ret;
 err_unlock:
        spin_unlock_irq(&q->queue_lock);
-       rcu_read_unlock();
        if (preloaded)
                radix_tree_preload_end();
        return PTR_ERR(blkg);