#include "blk-ioprio.h"
 
 static DEFINE_PER_CPU(struct llist_head, blk_cpu_done);
+static DEFINE_PER_CPU(call_single_data_t, blk_cpu_csd);
 
 static void blk_mq_insert_request(struct request *rq, blk_insert_t flags);
 static void blk_mq_request_bypass_insert(struct request *rq,
 
 static void blk_mq_complete_send_ipi(struct request *rq)
 {
-       struct llist_head *list;
        unsigned int cpu;
 
        cpu = rq->mq_ctx->cpu;
-       list = &per_cpu(blk_cpu_done, cpu);
-       if (llist_add(&rq->ipi_list, list)) {
-               INIT_CSD(&rq->csd, __blk_mq_complete_request_remote, rq);
-               smp_call_function_single_async(cpu, &rq->csd);
-       }
+       if (llist_add(&rq->ipi_list, &per_cpu(blk_cpu_done, cpu)))
+               smp_call_function_single_async(cpu, &per_cpu(blk_cpu_csd, cpu));
 }
 
 static void blk_mq_raise_softirq(struct request *rq)
 
        for_each_possible_cpu(i)
                init_llist_head(&per_cpu(blk_cpu_done, i));
+       for_each_possible_cpu(i)
+               INIT_CSD(&per_cpu(blk_cpu_csd, i),
+                        __blk_mq_complete_request_remote, NULL);
        open_softirq(BLOCK_SOFTIRQ, blk_done_softirq);
 
        cpuhp_setup_state_nocalls(CPUHP_BLOCK_SOFTIRQ_DEAD,