perf record: Skip side-band event setup if HAVE_LIBBPF_SUPPORT is not set
[linux-2.6-microblaze.git] / block / blk-mq-sched.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * blk-mq scheduling framework
4  *
5  * Copyright (C) 2016 Jens Axboe
6  */
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/blk-mq.h>
10 #include <linux/list_sort.h>
11
12 #include <trace/events/block.h>
13
14 #include "blk.h"
15 #include "blk-mq.h"
16 #include "blk-mq-debugfs.h"
17 #include "blk-mq-sched.h"
18 #include "blk-mq-tag.h"
19 #include "blk-wbt.h"
20
21 void blk_mq_sched_free_hctx_data(struct request_queue *q,
22                                  void (*exit)(struct blk_mq_hw_ctx *))
23 {
24         struct blk_mq_hw_ctx *hctx;
25         int i;
26
27         queue_for_each_hw_ctx(q, hctx, i) {
28                 if (exit && hctx->sched_data)
29                         exit(hctx);
30                 kfree(hctx->sched_data);
31                 hctx->sched_data = NULL;
32         }
33 }
34 EXPORT_SYMBOL_GPL(blk_mq_sched_free_hctx_data);
35
36 void blk_mq_sched_assign_ioc(struct request *rq)
37 {
38         struct request_queue *q = rq->q;
39         struct io_context *ioc;
40         struct io_cq *icq;
41
42         /*
43          * May not have an IO context if it's a passthrough request
44          */
45         ioc = current->io_context;
46         if (!ioc)
47                 return;
48
49         spin_lock_irq(&q->queue_lock);
50         icq = ioc_lookup_icq(ioc, q);
51         spin_unlock_irq(&q->queue_lock);
52
53         if (!icq) {
54                 icq = ioc_create_icq(ioc, q, GFP_ATOMIC);
55                 if (!icq)
56                         return;
57         }
58         get_io_context(icq->ioc);
59         rq->elv.icq = icq;
60 }
61
62 /*
63  * Mark a hardware queue as needing a restart. For shared queues, maintain
64  * a count of how many hardware queues are marked for restart.
65  */
66 void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
67 {
68         if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
69                 return;
70
71         set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
72 }
73 EXPORT_SYMBOL_GPL(blk_mq_sched_mark_restart_hctx);
74
75 void blk_mq_sched_restart(struct blk_mq_hw_ctx *hctx)
76 {
77         if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
78                 return;
79         clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
80
81         blk_mq_run_hw_queue(hctx, true);
82 }
83
84 static int sched_rq_cmp(void *priv, struct list_head *a, struct list_head *b)
85 {
86         struct request *rqa = container_of(a, struct request, queuelist);
87         struct request *rqb = container_of(b, struct request, queuelist);
88
89         return rqa->mq_hctx > rqb->mq_hctx;
90 }
91
92 static bool blk_mq_dispatch_hctx_list(struct list_head *rq_list)
93 {
94         struct blk_mq_hw_ctx *hctx =
95                 list_first_entry(rq_list, struct request, queuelist)->mq_hctx;
96         struct request *rq;
97         LIST_HEAD(hctx_list);
98         unsigned int count = 0;
99
100         list_for_each_entry(rq, rq_list, queuelist) {
101                 if (rq->mq_hctx != hctx) {
102                         list_cut_before(&hctx_list, rq_list, &rq->queuelist);
103                         goto dispatch;
104                 }
105                 count++;
106         }
107         list_splice_tail_init(rq_list, &hctx_list);
108
109 dispatch:
110         return blk_mq_dispatch_rq_list(hctx, &hctx_list, count);
111 }
112
113 #define BLK_MQ_BUDGET_DELAY     3               /* ms units */
114
115 /*
116  * Only SCSI implements .get_budget and .put_budget, and SCSI restarts
117  * its queue by itself in its completion handler, so we don't need to
118  * restart queue if .get_budget() returns BLK_STS_NO_RESOURCE.
119  *
120  * Returns -EAGAIN if hctx->dispatch was found non-empty and run_work has to
121  * be run again.  This is necessary to avoid starving flushes.
122  */
123 static int __blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx)
124 {
125         struct request_queue *q = hctx->queue;
126         struct elevator_queue *e = q->elevator;
127         bool multi_hctxs = false, run_queue = false;
128         bool dispatched = false, busy = false;
129         unsigned int max_dispatch;
130         LIST_HEAD(rq_list);
131         int count = 0;
132
133         if (hctx->dispatch_busy)
134                 max_dispatch = 1;
135         else
136                 max_dispatch = hctx->queue->nr_requests;
137
138         do {
139                 struct request *rq;
140
141                 if (e->type->ops.has_work && !e->type->ops.has_work(hctx))
142                         break;
143
144                 if (!list_empty_careful(&hctx->dispatch)) {
145                         busy = true;
146                         break;
147                 }
148
149                 if (!blk_mq_get_dispatch_budget(q))
150                         break;
151
152                 rq = e->type->ops.dispatch_request(hctx);
153                 if (!rq) {
154                         blk_mq_put_dispatch_budget(q);
155                         /*
156                          * We're releasing without dispatching. Holding the
157                          * budget could have blocked any "hctx"s with the
158                          * same queue and if we didn't dispatch then there's
159                          * no guarantee anyone will kick the queue.  Kick it
160                          * ourselves.
161                          */
162                         run_queue = true;
163                         break;
164                 }
165
166                 /*
167                  * Now this rq owns the budget which has to be released
168                  * if this rq won't be queued to driver via .queue_rq()
169                  * in blk_mq_dispatch_rq_list().
170                  */
171                 list_add_tail(&rq->queuelist, &rq_list);
172                 if (rq->mq_hctx != hctx)
173                         multi_hctxs = true;
174         } while (++count < max_dispatch);
175
176         if (!count) {
177                 if (run_queue)
178                         blk_mq_delay_run_hw_queues(q, BLK_MQ_BUDGET_DELAY);
179         } else if (multi_hctxs) {
180                 /*
181                  * Requests from different hctx may be dequeued from some
182                  * schedulers, such as bfq and deadline.
183                  *
184                  * Sort the requests in the list according to their hctx,
185                  * dispatch batching requests from same hctx at a time.
186                  */
187                 list_sort(NULL, &rq_list, sched_rq_cmp);
188                 do {
189                         dispatched |= blk_mq_dispatch_hctx_list(&rq_list);
190                 } while (!list_empty(&rq_list));
191         } else {
192                 dispatched = blk_mq_dispatch_rq_list(hctx, &rq_list, count);
193         }
194
195         if (busy)
196                 return -EAGAIN;
197         return !!dispatched;
198 }
199
200 static int blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx)
201 {
202         int ret;
203
204         do {
205                 ret = __blk_mq_do_dispatch_sched(hctx);
206         } while (ret == 1);
207
208         return ret;
209 }
210
211 static struct blk_mq_ctx *blk_mq_next_ctx(struct blk_mq_hw_ctx *hctx,
212                                           struct blk_mq_ctx *ctx)
213 {
214         unsigned short idx = ctx->index_hw[hctx->type];
215
216         if (++idx == hctx->nr_ctx)
217                 idx = 0;
218
219         return hctx->ctxs[idx];
220 }
221
222 /*
223  * Only SCSI implements .get_budget and .put_budget, and SCSI restarts
224  * its queue by itself in its completion handler, so we don't need to
225  * restart queue if .get_budget() returns BLK_STS_NO_RESOURCE.
226  *
227  * Returns -EAGAIN if hctx->dispatch was found non-empty and run_work has to
228  * be run again.  This is necessary to avoid starving flushes.
229  */
230 static int blk_mq_do_dispatch_ctx(struct blk_mq_hw_ctx *hctx)
231 {
232         struct request_queue *q = hctx->queue;
233         LIST_HEAD(rq_list);
234         struct blk_mq_ctx *ctx = READ_ONCE(hctx->dispatch_from);
235         int ret = 0;
236         struct request *rq;
237
238         do {
239                 if (!list_empty_careful(&hctx->dispatch)) {
240                         ret = -EAGAIN;
241                         break;
242                 }
243
244                 if (!sbitmap_any_bit_set(&hctx->ctx_map))
245                         break;
246
247                 if (!blk_mq_get_dispatch_budget(q))
248                         break;
249
250                 rq = blk_mq_dequeue_from_ctx(hctx, ctx);
251                 if (!rq) {
252                         blk_mq_put_dispatch_budget(q);
253                         /*
254                          * We're releasing without dispatching. Holding the
255                          * budget could have blocked any "hctx"s with the
256                          * same queue and if we didn't dispatch then there's
257                          * no guarantee anyone will kick the queue.  Kick it
258                          * ourselves.
259                          */
260                         blk_mq_delay_run_hw_queues(q, BLK_MQ_BUDGET_DELAY);
261                         break;
262                 }
263
264                 /*
265                  * Now this rq owns the budget which has to be released
266                  * if this rq won't be queued to driver via .queue_rq()
267                  * in blk_mq_dispatch_rq_list().
268                  */
269                 list_add(&rq->queuelist, &rq_list);
270
271                 /* round robin for fair dispatch */
272                 ctx = blk_mq_next_ctx(hctx, rq->mq_ctx);
273
274         } while (blk_mq_dispatch_rq_list(rq->mq_hctx, &rq_list, 1));
275
276         WRITE_ONCE(hctx->dispatch_from, ctx);
277         return ret;
278 }
279
280 static int __blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
281 {
282         struct request_queue *q = hctx->queue;
283         struct elevator_queue *e = q->elevator;
284         const bool has_sched_dispatch = e && e->type->ops.dispatch_request;
285         int ret = 0;
286         LIST_HEAD(rq_list);
287
288         /*
289          * If we have previous entries on our dispatch list, grab them first for
290          * more fair dispatch.
291          */
292         if (!list_empty_careful(&hctx->dispatch)) {
293                 spin_lock(&hctx->lock);
294                 if (!list_empty(&hctx->dispatch))
295                         list_splice_init(&hctx->dispatch, &rq_list);
296                 spin_unlock(&hctx->lock);
297         }
298
299         /*
300          * Only ask the scheduler for requests, if we didn't have residual
301          * requests from the dispatch list. This is to avoid the case where
302          * we only ever dispatch a fraction of the requests available because
303          * of low device queue depth. Once we pull requests out of the IO
304          * scheduler, we can no longer merge or sort them. So it's best to
305          * leave them there for as long as we can. Mark the hw queue as
306          * needing a restart in that case.
307          *
308          * We want to dispatch from the scheduler if there was nothing
309          * on the dispatch list or we were able to dispatch from the
310          * dispatch list.
311          */
312         if (!list_empty(&rq_list)) {
313                 blk_mq_sched_mark_restart_hctx(hctx);
314                 if (blk_mq_dispatch_rq_list(hctx, &rq_list, 0)) {
315                         if (has_sched_dispatch)
316                                 ret = blk_mq_do_dispatch_sched(hctx);
317                         else
318                                 ret = blk_mq_do_dispatch_ctx(hctx);
319                 }
320         } else if (has_sched_dispatch) {
321                 ret = blk_mq_do_dispatch_sched(hctx);
322         } else if (hctx->dispatch_busy) {
323                 /* dequeue request one by one from sw queue if queue is busy */
324                 ret = blk_mq_do_dispatch_ctx(hctx);
325         } else {
326                 blk_mq_flush_busy_ctxs(hctx, &rq_list);
327                 blk_mq_dispatch_rq_list(hctx, &rq_list, 0);
328         }
329
330         return ret;
331 }
332
333 void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
334 {
335         struct request_queue *q = hctx->queue;
336
337         /* RCU or SRCU read lock is needed before checking quiesced flag */
338         if (unlikely(blk_mq_hctx_stopped(hctx) || blk_queue_quiesced(q)))
339                 return;
340
341         hctx->run++;
342
343         /*
344          * A return of -EAGAIN is an indication that hctx->dispatch is not
345          * empty and we must run again in order to avoid starving flushes.
346          */
347         if (__blk_mq_sched_dispatch_requests(hctx) == -EAGAIN) {
348                 if (__blk_mq_sched_dispatch_requests(hctx) == -EAGAIN)
349                         blk_mq_run_hw_queue(hctx, true);
350         }
351 }
352
353 bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
354                 unsigned int nr_segs, struct request **merged_request)
355 {
356         struct request *rq;
357
358         switch (elv_merge(q, &rq, bio)) {
359         case ELEVATOR_BACK_MERGE:
360                 if (!blk_mq_sched_allow_merge(q, rq, bio))
361                         return false;
362                 if (!bio_attempt_back_merge(rq, bio, nr_segs))
363                         return false;
364                 *merged_request = attempt_back_merge(q, rq);
365                 if (!*merged_request)
366                         elv_merged_request(q, rq, ELEVATOR_BACK_MERGE);
367                 return true;
368         case ELEVATOR_FRONT_MERGE:
369                 if (!blk_mq_sched_allow_merge(q, rq, bio))
370                         return false;
371                 if (!bio_attempt_front_merge(rq, bio, nr_segs))
372                         return false;
373                 *merged_request = attempt_front_merge(q, rq);
374                 if (!*merged_request)
375                         elv_merged_request(q, rq, ELEVATOR_FRONT_MERGE);
376                 return true;
377         case ELEVATOR_DISCARD_MERGE:
378                 return bio_attempt_discard_merge(q, rq, bio);
379         default:
380                 return false;
381         }
382 }
383 EXPORT_SYMBOL_GPL(blk_mq_sched_try_merge);
384
385 /*
386  * Iterate list of requests and see if we can merge this bio with any
387  * of them.
388  */
389 bool blk_mq_bio_list_merge(struct request_queue *q, struct list_head *list,
390                            struct bio *bio, unsigned int nr_segs)
391 {
392         struct request *rq;
393         int checked = 8;
394
395         list_for_each_entry_reverse(rq, list, queuelist) {
396                 bool merged = false;
397
398                 if (!checked--)
399                         break;
400
401                 if (!blk_rq_merge_ok(rq, bio))
402                         continue;
403
404                 switch (blk_try_merge(rq, bio)) {
405                 case ELEVATOR_BACK_MERGE:
406                         if (blk_mq_sched_allow_merge(q, rq, bio))
407                                 merged = bio_attempt_back_merge(rq, bio,
408                                                 nr_segs);
409                         break;
410                 case ELEVATOR_FRONT_MERGE:
411                         if (blk_mq_sched_allow_merge(q, rq, bio))
412                                 merged = bio_attempt_front_merge(rq, bio,
413                                                 nr_segs);
414                         break;
415                 case ELEVATOR_DISCARD_MERGE:
416                         merged = bio_attempt_discard_merge(q, rq, bio);
417                         break;
418                 default:
419                         continue;
420                 }
421
422                 return merged;
423         }
424
425         return false;
426 }
427 EXPORT_SYMBOL_GPL(blk_mq_bio_list_merge);
428
429 /*
430  * Reverse check our software queue for entries that we could potentially
431  * merge with. Currently includes a hand-wavy stop count of 8, to not spend
432  * too much time checking for merges.
433  */
434 static bool blk_mq_attempt_merge(struct request_queue *q,
435                                  struct blk_mq_hw_ctx *hctx,
436                                  struct blk_mq_ctx *ctx, struct bio *bio,
437                                  unsigned int nr_segs)
438 {
439         enum hctx_type type = hctx->type;
440
441         lockdep_assert_held(&ctx->lock);
442
443         if (blk_mq_bio_list_merge(q, &ctx->rq_lists[type], bio, nr_segs)) {
444                 ctx->rq_merged++;
445                 return true;
446         }
447
448         return false;
449 }
450
451 bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio,
452                 unsigned int nr_segs)
453 {
454         struct elevator_queue *e = q->elevator;
455         struct blk_mq_ctx *ctx = blk_mq_get_ctx(q);
456         struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(q, bio->bi_opf, ctx);
457         bool ret = false;
458         enum hctx_type type;
459
460         if (e && e->type->ops.bio_merge)
461                 return e->type->ops.bio_merge(hctx, bio, nr_segs);
462
463         type = hctx->type;
464         if ((hctx->flags & BLK_MQ_F_SHOULD_MERGE) &&
465                         !list_empty_careful(&ctx->rq_lists[type])) {
466                 /* default per sw-queue merge */
467                 spin_lock(&ctx->lock);
468                 ret = blk_mq_attempt_merge(q, hctx, ctx, bio, nr_segs);
469                 spin_unlock(&ctx->lock);
470         }
471
472         return ret;
473 }
474
475 bool blk_mq_sched_try_insert_merge(struct request_queue *q, struct request *rq)
476 {
477         return rq_mergeable(rq) && elv_attempt_insert_merge(q, rq);
478 }
479 EXPORT_SYMBOL_GPL(blk_mq_sched_try_insert_merge);
480
481 void blk_mq_sched_request_inserted(struct request *rq)
482 {
483         trace_block_rq_insert(rq->q, rq);
484 }
485 EXPORT_SYMBOL_GPL(blk_mq_sched_request_inserted);
486
487 static bool blk_mq_sched_bypass_insert(struct blk_mq_hw_ctx *hctx,
488                                        bool has_sched,
489                                        struct request *rq)
490 {
491         /*
492          * dispatch flush and passthrough rq directly
493          *
494          * passthrough request has to be added to hctx->dispatch directly.
495          * For some reason, device may be in one situation which can't
496          * handle FS request, so STS_RESOURCE is always returned and the
497          * FS request will be added to hctx->dispatch. However passthrough
498          * request may be required at that time for fixing the problem. If
499          * passthrough request is added to scheduler queue, there isn't any
500          * chance to dispatch it given we prioritize requests in hctx->dispatch.
501          */
502         if ((rq->rq_flags & RQF_FLUSH_SEQ) || blk_rq_is_passthrough(rq))
503                 return true;
504
505         if (has_sched)
506                 rq->rq_flags |= RQF_SORTED;
507
508         return false;
509 }
510
511 void blk_mq_sched_insert_request(struct request *rq, bool at_head,
512                                  bool run_queue, bool async)
513 {
514         struct request_queue *q = rq->q;
515         struct elevator_queue *e = q->elevator;
516         struct blk_mq_ctx *ctx = rq->mq_ctx;
517         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
518
519         /* flush rq in flush machinery need to be dispatched directly */
520         if (!(rq->rq_flags & RQF_FLUSH_SEQ) && op_is_flush(rq->cmd_flags)) {
521                 blk_insert_flush(rq);
522                 goto run;
523         }
524
525         WARN_ON(e && (rq->tag != -1));
526
527         if (blk_mq_sched_bypass_insert(hctx, !!e, rq)) {
528                 /*
529                  * Firstly normal IO request is inserted to scheduler queue or
530                  * sw queue, meantime we add flush request to dispatch queue(
531                  * hctx->dispatch) directly and there is at most one in-flight
532                  * flush request for each hw queue, so it doesn't matter to add
533                  * flush request to tail or front of the dispatch queue.
534                  *
535                  * Secondly in case of NCQ, flush request belongs to non-NCQ
536                  * command, and queueing it will fail when there is any
537                  * in-flight normal IO request(NCQ command). When adding flush
538                  * rq to the front of hctx->dispatch, it is easier to introduce
539                  * extra time to flush rq's latency because of S_SCHED_RESTART
540                  * compared with adding to the tail of dispatch queue, then
541                  * chance of flush merge is increased, and less flush requests
542                  * will be issued to controller. It is observed that ~10% time
543                  * is saved in blktests block/004 on disk attached to AHCI/NCQ
544                  * drive when adding flush rq to the front of hctx->dispatch.
545                  *
546                  * Simply queue flush rq to the front of hctx->dispatch so that
547                  * intensive flush workloads can benefit in case of NCQ HW.
548                  */
549                 at_head = (rq->rq_flags & RQF_FLUSH_SEQ) ? true : at_head;
550                 blk_mq_request_bypass_insert(rq, at_head, false);
551                 goto run;
552         }
553
554         if (e && e->type->ops.insert_requests) {
555                 LIST_HEAD(list);
556
557                 list_add(&rq->queuelist, &list);
558                 e->type->ops.insert_requests(hctx, &list, at_head);
559         } else {
560                 spin_lock(&ctx->lock);
561                 __blk_mq_insert_request(hctx, rq, at_head);
562                 spin_unlock(&ctx->lock);
563         }
564
565 run:
566         if (run_queue)
567                 blk_mq_run_hw_queue(hctx, async);
568 }
569
570 void blk_mq_sched_insert_requests(struct blk_mq_hw_ctx *hctx,
571                                   struct blk_mq_ctx *ctx,
572                                   struct list_head *list, bool run_queue_async)
573 {
574         struct elevator_queue *e;
575         struct request_queue *q = hctx->queue;
576
577         /*
578          * blk_mq_sched_insert_requests() is called from flush plug
579          * context only, and hold one usage counter to prevent queue
580          * from being released.
581          */
582         percpu_ref_get(&q->q_usage_counter);
583
584         e = hctx->queue->elevator;
585         if (e && e->type->ops.insert_requests)
586                 e->type->ops.insert_requests(hctx, list, false);
587         else {
588                 /*
589                  * try to issue requests directly if the hw queue isn't
590                  * busy in case of 'none' scheduler, and this way may save
591                  * us one extra enqueue & dequeue to sw queue.
592                  */
593                 if (!hctx->dispatch_busy && !e && !run_queue_async) {
594                         blk_mq_try_issue_list_directly(hctx, list);
595                         if (list_empty(list))
596                                 goto out;
597                 }
598                 blk_mq_insert_requests(hctx, ctx, list);
599         }
600
601         blk_mq_run_hw_queue(hctx, run_queue_async);
602  out:
603         percpu_ref_put(&q->q_usage_counter);
604 }
605
606 static void blk_mq_sched_free_tags(struct blk_mq_tag_set *set,
607                                    struct blk_mq_hw_ctx *hctx,
608                                    unsigned int hctx_idx)
609 {
610         if (hctx->sched_tags) {
611                 blk_mq_free_rqs(set, hctx->sched_tags, hctx_idx);
612                 blk_mq_free_rq_map(hctx->sched_tags);
613                 hctx->sched_tags = NULL;
614         }
615 }
616
617 static int blk_mq_sched_alloc_tags(struct request_queue *q,
618                                    struct blk_mq_hw_ctx *hctx,
619                                    unsigned int hctx_idx)
620 {
621         struct blk_mq_tag_set *set = q->tag_set;
622         int ret;
623
624         hctx->sched_tags = blk_mq_alloc_rq_map(set, hctx_idx, q->nr_requests,
625                                                set->reserved_tags);
626         if (!hctx->sched_tags)
627                 return -ENOMEM;
628
629         ret = blk_mq_alloc_rqs(set, hctx->sched_tags, hctx_idx, q->nr_requests);
630         if (ret)
631                 blk_mq_sched_free_tags(set, hctx, hctx_idx);
632
633         return ret;
634 }
635
636 /* called in queue's release handler, tagset has gone away */
637 static void blk_mq_sched_tags_teardown(struct request_queue *q)
638 {
639         struct blk_mq_hw_ctx *hctx;
640         int i;
641
642         queue_for_each_hw_ctx(q, hctx, i) {
643                 if (hctx->sched_tags) {
644                         blk_mq_free_rq_map(hctx->sched_tags);
645                         hctx->sched_tags = NULL;
646                 }
647         }
648 }
649
650 int blk_mq_init_sched(struct request_queue *q, struct elevator_type *e)
651 {
652         struct blk_mq_hw_ctx *hctx;
653         struct elevator_queue *eq;
654         unsigned int i;
655         int ret;
656
657         if (!e) {
658                 q->elevator = NULL;
659                 q->nr_requests = q->tag_set->queue_depth;
660                 return 0;
661         }
662
663         /*
664          * Default to double of smaller one between hw queue_depth and 128,
665          * since we don't split into sync/async like the old code did.
666          * Additionally, this is a per-hw queue depth.
667          */
668         q->nr_requests = 2 * min_t(unsigned int, q->tag_set->queue_depth,
669                                    BLKDEV_MAX_RQ);
670
671         queue_for_each_hw_ctx(q, hctx, i) {
672                 ret = blk_mq_sched_alloc_tags(q, hctx, i);
673                 if (ret)
674                         goto err;
675         }
676
677         ret = e->ops.init_sched(q, e);
678         if (ret)
679                 goto err;
680
681         blk_mq_debugfs_register_sched(q);
682
683         queue_for_each_hw_ctx(q, hctx, i) {
684                 if (e->ops.init_hctx) {
685                         ret = e->ops.init_hctx(hctx, i);
686                         if (ret) {
687                                 eq = q->elevator;
688                                 blk_mq_sched_free_requests(q);
689                                 blk_mq_exit_sched(q, eq);
690                                 kobject_put(&eq->kobj);
691                                 return ret;
692                         }
693                 }
694                 blk_mq_debugfs_register_sched_hctx(q, hctx);
695         }
696
697         return 0;
698
699 err:
700         blk_mq_sched_free_requests(q);
701         blk_mq_sched_tags_teardown(q);
702         q->elevator = NULL;
703         return ret;
704 }
705
706 /*
707  * called in either blk_queue_cleanup or elevator_switch, tagset
708  * is required for freeing requests
709  */
710 void blk_mq_sched_free_requests(struct request_queue *q)
711 {
712         struct blk_mq_hw_ctx *hctx;
713         int i;
714
715         queue_for_each_hw_ctx(q, hctx, i) {
716                 if (hctx->sched_tags)
717                         blk_mq_free_rqs(q->tag_set, hctx->sched_tags, i);
718         }
719 }
720
721 void blk_mq_exit_sched(struct request_queue *q, struct elevator_queue *e)
722 {
723         struct blk_mq_hw_ctx *hctx;
724         unsigned int i;
725
726         queue_for_each_hw_ctx(q, hctx, i) {
727                 blk_mq_debugfs_unregister_sched_hctx(hctx);
728                 if (e->type->ops.exit_hctx && hctx->sched_data) {
729                         e->type->ops.exit_hctx(hctx, i);
730                         hctx->sched_data = NULL;
731                 }
732         }
733         blk_mq_debugfs_unregister_sched(q);
734         if (e->type->ops.exit_sched)
735                 e->type->ops.exit_sched(e);
736         blk_mq_sched_tags_teardown(q);
737         q->elevator = NULL;
738 }