Messages in this thread | | | Subject | Re: [PATCH] blkcg: not hold blkcg lock when deactivating policy. | From | Paolo Valente <> | Date | Tue, 17 Apr 2018 14:32:39 +0200 |
| |
> Il giorno 17 apr 2018, alle ore 09:10, Jiang Biao <jiang.biao2@zte.com.cn> ha scritto: > > As described in the comment of blkcg_activate_policy(), > *Update of each blkg is protected by both queue and blkcg locks so > that holding either lock and testing blkcg_policy_enabled() is > always enough for dereferencing policy data.* > with queue lock held, there is no need to hold blkcg lock in > blkcg_deactivate_policy(). Similar case is in > blkcg_activate_policy(), which has removed holding of blkcg lock in > commit 4c55f4f9ad3001ac1fefdd8d8ca7641d18558e23. >
Hi, by chance, did you check whether this may cause problems with bfq, being the latter not protected by the queue lock as cfq?
Thanks, Paolo
> Signed-off-by: Jiang Biao <jiang.biao2@zte.com.cn> > Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> > CC: Tejun Heo <tj@kernel.org> > CC: Jens Axboe <axboe@kernel.dk> > --- > block/blk-cgroup.c | 5 ----- > 1 file changed, 5 deletions(-) > > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > index c2033a2..2b7f8d0 100644 > --- a/block/blk-cgroup.c > +++ b/block/blk-cgroup.c > @@ -1367,17 +1367,12 @@ void blkcg_deactivate_policy(struct request_queue *q, > __clear_bit(pol->plid, q->blkcg_pols); > > list_for_each_entry(blkg, &q->blkg_list, q_node) { > - /* grab blkcg lock too while removing @pd from @blkg */ > - spin_lock(&blkg->blkcg->lock); > - > if (blkg->pd[pol->plid]) { > if (pol->pd_offline_fn) > pol->pd_offline_fn(blkg->pd[pol->plid]); > pol->pd_free_fn(blkg->pd[pol->plid]); > blkg->pd[pol->plid] = NULL; > } > - > - spin_unlock(&blkg->blkcg->lock); > } > > spin_unlock_irq(q->queue_lock); > -- > 2.7.4 >
| |