Skip to content

Commit c7bb9ad

Browse files
committed
block: get rid of q->softirq_done_fn()
With the legacy path gone, all we do is funnel it through the mq_ops->complete() operation. Tested-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 7d69233 commit c7bb9ad

File tree

5 files changed

+12
-21
lines changed

5 files changed

+12
-21
lines changed

block/blk-mq.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -546,13 +546,15 @@ EXPORT_SYMBOL(blk_mq_end_request);
546546
static void __blk_mq_complete_request_remote(void *data)
547547
{
548548
struct request *rq = data;
549+
struct request_queue *q = rq->q;
549550

550-
rq->q->softirq_done_fn(rq);
551+
q->mq_ops->complete(rq);
551552
}
552553

553554
static void __blk_mq_complete_request(struct request *rq)
554555
{
555556
struct blk_mq_ctx *ctx = rq->mq_ctx;
557+
struct request_queue *q = rq->q;
556558
bool shared = false;
557559
int cpu;
558560

@@ -568,18 +570,18 @@ static void __blk_mq_complete_request(struct request *rq)
568570
* So complete IO reqeust in softirq context in case of single queue
569571
* for not degrading IO performance by irqsoff latency.
570572
*/
571-
if (rq->q->nr_hw_queues == 1) {
573+
if (q->nr_hw_queues == 1) {
572574
__blk_complete_request(rq);
573575
return;
574576
}
575577

576-
if (!test_bit(QUEUE_FLAG_SAME_COMP, &rq->q->queue_flags)) {
577-
rq->q->softirq_done_fn(rq);
578+
if (!test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags)) {
579+
q->mq_ops->complete(rq);
578580
return;
579581
}
580582

581583
cpu = get_cpu();
582-
if (!test_bit(QUEUE_FLAG_SAME_FORCE, &rq->q->queue_flags))
584+
if (!test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags))
583585
shared = cpus_share_cache(cpu, ctx->cpu);
584586

585587
if (cpu != ctx->cpu && !shared && cpu_online(ctx->cpu)) {
@@ -588,7 +590,7 @@ static void __blk_mq_complete_request(struct request *rq)
588590
rq->csd.flags = 0;
589591
smp_call_function_single_async(ctx->cpu, &rq->csd);
590592
} else {
591-
rq->q->softirq_done_fn(rq);
593+
q->mq_ops->complete(rq);
592594
}
593595
put_cpu();
594596
}
@@ -2701,9 +2703,6 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
27012703
*/
27022704
q->poll_nsec = -1;
27032705

2704-
if (set->ops->complete)
2705-
blk_queue_softirq_done(q, set->ops->complete);
2706-
27072706
blk_mq_init_cpu_queues(q, set->nr_hw_queues);
27082707
blk_mq_add_queue_tag_set(set, q);
27092708
blk_mq_map_swqueue(q);

block/blk-settings.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ EXPORT_SYMBOL(blk_max_low_pfn);
2020

2121
unsigned long blk_max_pfn;
2222

23-
void blk_queue_softirq_done(struct request_queue *q, softirq_done_fn *fn)
24-
{
25-
q->softirq_done_fn = fn;
26-
}
27-
EXPORT_SYMBOL(blk_queue_softirq_done);
28-
2923
void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout)
3024
{
3125
q->rq_timeout = timeout;

block/blk-softirq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static __latent_entropy void blk_done_softirq(struct softirq_action *h)
3434

3535
rq = list_entry(local_list.next, struct request, ipi_list);
3636
list_del_init(&rq->ipi_list);
37-
rq->q->softirq_done_fn(rq);
37+
rq->q->mq_ops->complete(rq);
3838
}
3939
}
4040

@@ -102,7 +102,7 @@ void __blk_complete_request(struct request *req)
102102
unsigned long flags;
103103
bool shared = false;
104104

105-
BUG_ON(!q->softirq_done_fn);
105+
BUG_ON(!q->mq_ops->complete);
106106

107107
local_irq_save(flags);
108108
cpu = smp_processor_id();

include/linux/blk-mq.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ typedef void (busy_tag_iter_fn)(struct request *, void *, bool);
115115
typedef int (poll_fn)(struct blk_mq_hw_ctx *, unsigned int);
116116
typedef int (map_queues_fn)(struct blk_mq_tag_set *set);
117117
typedef bool (busy_fn)(struct request_queue *);
118+
typedef void (complete_fn)(struct request *);
118119

119120

120121
struct blk_mq_ops {
@@ -142,7 +143,7 @@ struct blk_mq_ops {
142143
*/
143144
poll_fn *poll;
144145

145-
softirq_done_fn *complete;
146+
complete_fn *complete;
146147

147148
/*
148149
* Called when the block layer side of a hardware queue has been

include/linux/blkdev.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ typedef blk_qc_t (make_request_fn) (struct request_queue *q, struct bio *bio);
290290
typedef bool (poll_q_fn) (struct request_queue *q, blk_qc_t);
291291

292292
struct bio_vec;
293-
typedef void (softirq_done_fn)(struct request *);
294293
typedef int (dma_drain_needed_fn)(struct request *);
295294

296295
enum blk_eh_timer_return {
@@ -407,7 +406,6 @@ struct request_queue {
407406

408407
make_request_fn *make_request_fn;
409408
poll_q_fn *poll_fn;
410-
softirq_done_fn *softirq_done_fn;
411409
dma_drain_needed_fn *dma_drain_needed;
412410

413411
const struct blk_mq_ops *mq_ops;
@@ -1113,7 +1111,6 @@ extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
11131111
extern void blk_queue_virt_boundary(struct request_queue *, unsigned long);
11141112
extern void blk_queue_dma_alignment(struct request_queue *, int);
11151113
extern void blk_queue_update_dma_alignment(struct request_queue *, int);
1116-
extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
11171114
extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
11181115
extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable);
11191116
extern void blk_queue_write_cache(struct request_queue *q, bool enabled, bool fua);

0 commit comments

Comments
 (0)