Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3738123 authored by Jens Axboe's avatar Jens Axboe
Browse files

blk-stat: don't use this_cpu_ptr() in a preemptable section



If PREEMPT_RCU is enabled, rcu_read_lock() isn't strong enough
for us to use this_cpu_ptr() in that section. Use the safer
get/put_cpu_ptr() variants instead.

Reported-by: default avatarMike Galbraith <efault@gmx.de>
Fixes: 34dbad5d ("blk-stat: convert to callback-based statistics reporting")
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 340ff321
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -96,13 +96,16 @@ void blk_stat_add(struct request *rq)

	rcu_read_lock();
	list_for_each_entry_rcu(cb, &q->stats->callbacks, list) {
		if (blk_stat_is_active(cb)) {
		if (!blk_stat_is_active(cb))
			continue;

		bucket = cb->bucket_fn(rq);
		if (bucket < 0)
			continue;
			stat = &this_cpu_ptr(cb->cpu_stat)[bucket];

		stat = &get_cpu_ptr(cb->cpu_stat)[bucket];
		__blk_stat_add(stat, value);
		}
		put_cpu_ptr(cb->cpu_stat);
	}
	rcu_read_unlock();
}