blk-mq: use percpu csd to remote complete instead of per-rq csd

If request need to be completed remotely, we insert it into percpu llist,
and smp_call_function_single_async() if llist is empty previously.

We don't need to use per-rq csd, percpu csd is enough. And the size of
struct request is decreased by 24 bytes.

This way is cleaner, and looks correct, given block softirq is guaranteed
to be scheduled to consume the list if one new request is added to this
percpu list, either smp_call_function_single_async() returns -EBUSY or 0.

Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20230717040058.3993930-2-chengming.zhou@linux.dev
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Chengming Zhou
2023-07-17 12:00:55 +08:00
committed by Jens Axboe
parent 43c9835b14
commit 660e802c76
2 changed files with 7 additions and 10 deletions

View File

@@ -182,10 +182,7 @@ struct request {
rq_end_io_fn *saved_end_io;
} flush;
union {
struct __call_single_data csd;
u64 fifo_time;
};
u64 fifo_time;
/*
* completion callback.