On Mon, Feb 03, 2020 at 06:28:15PM +0800, Hillf Danton wrote:
Hi Ming
On Mon, 3 Feb 2020 17:16:02 +0800 Ming Lei wrote:
quoted
On Sun, Feb 02, 2020 at 06:20:04PM +0800, Hillf Danton wrote:
quoted
Select the current cpu if it's mapped to hardware to make helpers like
blk_mq_rq_cpu() return correct value.
Signed-off-by: Hillf Danton <redacted>
---
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -454,7 +454,10 @@ struct request *blk_mq_alloc_request_hct
blk_queue_exit(q);
return ERR_PTR(-EXDEV);
}
- cpu = cpumask_first_and(alloc_data.hctx->cpumask, cpu_online_mask);
+ cpu = raw_smp_processor_id();
+ if (!cpumask_test_cpu(cpu, alloc_data.hctx->cpumask))
+ cpu = cpumask_first_and(alloc_data.hctx->cpumask,
+ cpu_online_mask);
How can you know if there is any online CPU available for this hctx?
I don't except for the current cpu.
The current CPU may not belong to hctx->cpumask for blk_mq_alloc_request_hctx(),
that is why I think this API is very weird.
Thanks,
Ming