iocost: don't nest spin_lock_irq in ioc_weight_write()

This code causes a static analysis warning:

    block/blk-iocost.c:2113 ioc_weight_write() error: double lock 'irq'

We disable IRQs in blkg_conf_prep() and re-enable them in
blkg_conf_finish().  IRQ disable/enable should not be nested because
that means the IRQs will be enabled at the first unlock instead of the
second one.

Fixes: 7caa47151a ("blkcg: implement blk-iocost")
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Dan Carpenter 2019-10-31 13:53:41 +03:00 committed by Jens Axboe
parent 6873e0bd6a
commit 41591a51f0
1 changed files with 2 additions and 2 deletions

View File

@ -2110,10 +2110,10 @@ static ssize_t ioc_weight_write(struct kernfs_open_file *of, char *buf,
goto einval; goto einval;
} }
spin_lock_irq(&iocg->ioc->lock); spin_lock(&iocg->ioc->lock);
iocg->cfg_weight = v; iocg->cfg_weight = v;
weight_updated(iocg); weight_updated(iocg);
spin_unlock_irq(&iocg->ioc->lock); spin_unlock(&iocg->ioc->lock);
blkg_conf_finish(&ctx); blkg_conf_finish(&ctx);
return nbytes; return nbytes;