cfq-iosched: fix a rcu warning
I got a rcu warnning at boot. the ioc->ioc_data is rcu_deferenced, but
doesn't hold rcu_read_lock.
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Cc: stable@kernel.org # after ab4bd22d
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
Родитель
258e43fdb0
Коммит
3181faa85b
|
@ -2773,11 +2773,14 @@ static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
cic->key = cfqd_dead_key(cfqd);
|
cic->key = cfqd_dead_key(cfqd);
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
if (rcu_dereference(ioc->ioc_data) == cic) {
|
if (rcu_dereference(ioc->ioc_data) == cic) {
|
||||||
|
rcu_read_unlock();
|
||||||
spin_lock(&ioc->lock);
|
spin_lock(&ioc->lock);
|
||||||
rcu_assign_pointer(ioc->ioc_data, NULL);
|
rcu_assign_pointer(ioc->ioc_data, NULL);
|
||||||
spin_unlock(&ioc->lock);
|
spin_unlock(&ioc->lock);
|
||||||
}
|
} else
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
if (cic->cfqq[BLK_RW_ASYNC]) {
|
if (cic->cfqq[BLK_RW_ASYNC]) {
|
||||||
cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_ASYNC]);
|
cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_ASYNC]);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче