linux/drivers/md/dm-rq.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2016 Red Hat, Inc. All rights reserved.
   3 *
   4 * This file is released under the GPL.
   5 */
   6
   7#include "dm-core.h"
   8#include "dm-rq.h"
   9
  10#include <linux/elevator.h> /* for rq_end_sector() */
  11#include <linux/blk-mq.h>
  12
  13#define DM_MSG_PREFIX "core-rq"
  14
  15#define DM_MQ_NR_HW_QUEUES 1
  16#define DM_MQ_QUEUE_DEPTH 2048
  17static unsigned dm_mq_nr_hw_queues = DM_MQ_NR_HW_QUEUES;
  18static unsigned dm_mq_queue_depth = DM_MQ_QUEUE_DEPTH;
  19
  20/*
  21 * Request-based DM's mempools' reserved IOs set by the user.
  22 */
  23#define RESERVED_REQUEST_BASED_IOS      256
  24static unsigned reserved_rq_based_ios = RESERVED_REQUEST_BASED_IOS;
  25
  26static bool use_blk_mq = IS_ENABLED(CONFIG_DM_MQ_DEFAULT);
  27
  28bool dm_use_blk_mq_default(void)
  29{
  30        return use_blk_mq;
  31}
  32
  33bool dm_use_blk_mq(struct mapped_device *md)
  34{
  35        return md->use_blk_mq;
  36}
  37EXPORT_SYMBOL_GPL(dm_use_blk_mq);
  38
  39unsigned dm_get_reserved_rq_based_ios(void)
  40{
  41        return __dm_get_module_param(&reserved_rq_based_ios,
  42                                     RESERVED_REQUEST_BASED_IOS, DM_RESERVED_MAX_IOS);
  43}
  44EXPORT_SYMBOL_GPL(dm_get_reserved_rq_based_ios);
  45
  46static unsigned dm_get_blk_mq_nr_hw_queues(void)
  47{
  48        return __dm_get_module_param(&dm_mq_nr_hw_queues, 1, 32);
  49}
  50
  51static unsigned dm_get_blk_mq_queue_depth(void)
  52{
  53        return __dm_get_module_param(&dm_mq_queue_depth,
  54                                     DM_MQ_QUEUE_DEPTH, BLK_MQ_MAX_DEPTH);
  55}
  56
  57int dm_request_based(struct mapped_device *md)
  58{
  59        return blk_queue_stackable(md->queue);
  60}
  61
  62static void dm_old_start_queue(struct request_queue *q)
  63{
  64        unsigned long flags;
  65
  66        spin_lock_irqsave(q->queue_lock, flags);
  67        if (blk_queue_stopped(q))
  68                blk_start_queue(q);
  69        spin_unlock_irqrestore(q->queue_lock, flags);
  70}
  71
  72static void dm_mq_start_queue(struct request_queue *q)
  73{
  74        blk_mq_unquiesce_queue(q);
  75        blk_mq_kick_requeue_list(q);
  76}
  77
  78void dm_start_queue(struct request_queue *q)
  79{
  80        if (!q->mq_ops)
  81                dm_old_start_queue(q);
  82        else
  83                dm_mq_start_queue(q);
  84}
  85
  86static void dm_old_stop_queue(struct request_queue *q)
  87{
  88        unsigned long flags;
  89
  90        spin_lock_irqsave(q->queue_lock, flags);
  91        if (!blk_queue_stopped(q))
  92                blk_stop_queue(q);
  93        spin_unlock_irqrestore(q->queue_lock, flags);
  94}
  95
  96static void dm_mq_stop_queue(struct request_queue *q)
  97{
  98        if (blk_mq_queue_stopped(q))
  99                return;
 100
 101        blk_mq_quiesce_queue(q);
 102}
 103
 104void dm_stop_queue(struct request_queue *q)
 105{
 106        if (!q->mq_ops)
 107                dm_old_stop_queue(q);
 108        else
 109                dm_mq_stop_queue(q);
 110}
 111
 112/*
 113 * Partial completion handling for request-based dm
 114 */
 115static void end_clone_bio(struct bio *clone)
 116{
 117        struct dm_rq_clone_bio_info *info =
 118                container_of(clone, struct dm_rq_clone_bio_info, clone);
 119        struct dm_rq_target_io *tio = info->tio;
 120        unsigned int nr_bytes = info->orig->bi_iter.bi_size;
 121        blk_status_t error = clone->bi_status;
 122        bool is_last = !clone->bi_next;
 123
 124        bio_put(clone);
 125
 126        if (tio->error)
 127                /*
 128                 * An error has already been detected on the request.
 129                 * Once error occurred, just let clone->end_io() handle
 130                 * the remainder.
 131                 */
 132                return;
 133        else if (error) {
 134                /*
 135                 * Don't notice the error to the upper layer yet.
 136                 * The error handling decision is made by the target driver,
 137                 * when the request is completed.
 138                 */
 139                tio->error = error;
 140                goto exit;
 141        }
 142
 143        /*
 144         * I/O for the bio successfully completed.
 145         * Notice the data completion to the upper layer.
 146         */
 147        tio->completed += nr_bytes;
 148
 149        /*
 150         * Update the original request.
 151         * Do not use blk_end_request() here, because it may complete
 152         * the original request before the clone, and break the ordering.
 153         */
 154        if (is_last)
 155 exit:
 156                blk_update_request(tio->orig, BLK_STS_OK, tio->completed);
 157}
 158
 159static struct dm_rq_target_io *tio_from_request(struct request *rq)
 160{
 161        return blk_mq_rq_to_pdu(rq);
 162}
 163
 164static void rq_end_stats(struct mapped_device *md, struct request *orig)
 165{
 166        if (unlikely(dm_stats_used(&md->stats))) {
 167                struct dm_rq_target_io *tio = tio_from_request(orig);
 168                tio->duration_jiffies = jiffies - tio->duration_jiffies;
 169                dm_stats_account_io(&md->stats, rq_data_dir(orig),
 170                                    blk_rq_pos(orig), tio->n_sectors, true,
 171                                    tio->duration_jiffies, &tio->stats_aux);
 172        }
 173}
 174
 175/*
 176 * Don't touch any member of the md after calling this function because
 177 * the md may be freed in dm_put() at the end of this function.
 178 * Or do dm_get() before calling this function and dm_put() later.
 179 */
 180static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
 181{
 182        struct request_queue *q = md->queue;
 183        unsigned long flags;
 184
 185        atomic_dec(&md->pending[rw]);
 186
 187        /* nudge anyone waiting on suspend queue */
 188        if (!md_in_flight(md))
 189                wake_up(&md->wait);
 190
 191        /*
 192         * Run this off this callpath, as drivers could invoke end_io while
 193         * inside their request_fn (and holding the queue lock). Calling
 194         * back into ->request_fn() could deadlock attempting to grab the
 195         * queue lock again.
 196         */
 197        if (!q->mq_ops && run_queue) {
 198                spin_lock_irqsave(q->queue_lock, flags);
 199                blk_run_queue_async(q);
 200                spin_unlock_irqrestore(q->queue_lock, flags);
 201        }
 202
 203        /*
 204         * dm_put() must be at the end of this function. See the comment above
 205         */
 206        dm_put(md);
 207}
 208
 209/*
 210 * Complete the clone and the original request.
 211 * Must be called without clone's queue lock held,
 212 * see end_clone_request() for more details.
 213 */
 214static void dm_end_request(struct request *clone, blk_status_t error)
 215{
 216        int rw = rq_data_dir(clone);
 217        struct dm_rq_target_io *tio = clone->end_io_data;
 218        struct mapped_device *md = tio->md;
 219        struct request *rq = tio->orig;
 220
 221        blk_rq_unprep_clone(clone);
 222        tio->ti->type->release_clone_rq(clone);
 223
 224        rq_end_stats(md, rq);
 225        if (!rq->q->mq_ops)
 226                blk_end_request_all(rq, error);
 227        else
 228                blk_mq_end_request(rq, error);
 229        rq_completed(md, rw, true);
 230}
 231
 232/*
 233 * Requeue the original request of a clone.
 234 */
 235static void dm_old_requeue_request(struct request *rq, unsigned long delay_ms)
 236{
 237        struct request_queue *q = rq->q;
 238        unsigned long flags;
 239
 240        spin_lock_irqsave(q->queue_lock, flags);
 241        blk_requeue_request(q, rq);
 242        blk_delay_queue(q, delay_ms);
 243        spin_unlock_irqrestore(q->queue_lock, flags);
 244}
 245
 246static void __dm_mq_kick_requeue_list(struct request_queue *q, unsigned long msecs)
 247{
 248        blk_mq_delay_kick_requeue_list(q, msecs);
 249}
 250
 251void dm_mq_kick_requeue_list(struct mapped_device *md)
 252{
 253        __dm_mq_kick_requeue_list(dm_get_md_queue(md), 0);
 254}
 255EXPORT_SYMBOL(dm_mq_kick_requeue_list);
 256
 257static void dm_mq_delay_requeue_request(struct request *rq, unsigned long msecs)
 258{
 259        blk_mq_requeue_request(rq, false);
 260        __dm_mq_kick_requeue_list(rq->q, msecs);
 261}
 262
 263static void dm_requeue_original_request(struct dm_rq_target_io *tio, bool delay_requeue)
 264{
 265        struct mapped_device *md = tio->md;
 266        struct request *rq = tio->orig;
 267        int rw = rq_data_dir(rq);
 268        unsigned long delay_ms = delay_requeue ? 100 : 0;
 269
 270        rq_end_stats(md, rq);
 271        if (tio->clone) {
 272                blk_rq_unprep_clone(tio->clone);
 273                tio->ti->type->release_clone_rq(tio->clone);
 274        }
 275
 276        if (!rq->q->mq_ops)
 277                dm_old_requeue_request(rq, delay_ms);
 278        else
 279                dm_mq_delay_requeue_request(rq, delay_ms);
 280
 281        rq_completed(md, rw, false);
 282}
 283
 284static void dm_done(struct request *clone, blk_status_t error, bool mapped)
 285{
 286        int r = DM_ENDIO_DONE;
 287        struct dm_rq_target_io *tio = clone->end_io_data;
 288        dm_request_endio_fn rq_end_io = NULL;
 289
 290        if (tio->ti) {
 291                rq_end_io = tio->ti->type->rq_end_io;
 292
 293                if (mapped && rq_end_io)
 294                        r = rq_end_io(tio->ti, clone, error, &tio->info);
 295        }
 296
 297        if (unlikely(error == BLK_STS_TARGET)) {
 298                if (req_op(clone) == REQ_OP_WRITE_SAME &&
 299                    !clone->q->limits.max_write_same_sectors)
 300                        disable_write_same(tio->md);
 301                if (req_op(clone) == REQ_OP_WRITE_ZEROES &&
 302                    !clone->q->limits.max_write_zeroes_sectors)
 303                        disable_write_zeroes(tio->md);
 304        }
 305
 306        switch (r) {
 307        case DM_ENDIO_DONE:
 308                /* The target wants to complete the I/O */
 309                dm_end_request(clone, error);
 310                break;
 311        case DM_ENDIO_INCOMPLETE:
 312                /* The target will handle the I/O */
 313                return;
 314        case DM_ENDIO_REQUEUE:
 315                /* The target wants to requeue the I/O */
 316                dm_requeue_original_request(tio, false);
 317                break;
 318        default:
 319                DMWARN("unimplemented target endio return value: %d", r);
 320                BUG();
 321        }
 322}
 323
 324/*
 325 * Request completion handler for request-based dm
 326 */
 327static void dm_softirq_done(struct request *rq)
 328{
 329        bool mapped = true;
 330        struct dm_rq_target_io *tio = tio_from_request(rq);
 331        struct request *clone = tio->clone;
 332        int rw;
 333
 334        if (!clone) {
 335                struct mapped_device *md = tio->md;
 336
 337                rq_end_stats(md, rq);
 338                rw = rq_data_dir(rq);
 339                if (!rq->q->mq_ops)
 340                        blk_end_request_all(rq, tio->error);
 341                else
 342                        blk_mq_end_request(rq, tio->error);
 343                rq_completed(md, rw, false);
 344                return;
 345        }
 346
 347        if (rq->rq_flags & RQF_FAILED)
 348                mapped = false;
 349
 350        dm_done(clone, tio->error, mapped);
 351}
 352
 353/*
 354 * Complete the clone and the original request with the error status
 355 * through softirq context.
 356 */
 357static void dm_complete_request(struct request *rq, blk_status_t error)
 358{
 359        struct dm_rq_target_io *tio = tio_from_request(rq);
 360
 361        tio->error = error;
 362        if (!rq->q->mq_ops)
 363                blk_complete_request(rq);
 364        else
 365                blk_mq_complete_request(rq);
 366}
 367
 368/*
 369 * Complete the not-mapped clone and the original request with the error status
 370 * through softirq context.
 371 * Target's rq_end_io() function isn't called.
 372 * This may be used when the target's map_rq() or clone_and_map_rq() functions fail.
 373 */
 374static void dm_kill_unmapped_request(struct request *rq, blk_status_t error)
 375{
 376        rq->rq_flags |= RQF_FAILED;
 377        dm_complete_request(rq, error);
 378}
 379
 380/*
 381 * Called with the clone's queue lock held (in the case of .request_fn)
 382 */
 383static void end_clone_request(struct request *clone, blk_status_t error)
 384{
 385        struct dm_rq_target_io *tio = clone->end_io_data;
 386
 387        /*
 388         * Actual request completion is done in a softirq context which doesn't
 389         * hold the clone's queue lock.  Otherwise, deadlock could occur because:
 390         *     - another request may be submitted by the upper level driver
 391         *       of the stacking during the completion
 392         *     - the submission which requires queue lock may be done
 393         *       against this clone's queue
 394         */
 395        dm_complete_request(tio->orig, error);
 396}
 397
 398static void dm_dispatch_clone_request(struct request *clone, struct request *rq)
 399{
 400        blk_status_t r;
 401
 402        if (blk_queue_io_stat(clone->q))
 403                clone->rq_flags |= RQF_IO_STAT;
 404
 405        clone->start_time = jiffies;
 406        r = blk_insert_cloned_request(clone->q, clone);
 407        if (r)
 408                /* must complete clone in terms of original request */
 409                dm_complete_request(rq, r);
 410}
 411
 412static int dm_rq_bio_constructor(struct bio *bio, struct bio *bio_orig,
 413                                 void *data)
 414{
 415        struct dm_rq_target_io *tio = data;
 416        struct dm_rq_clone_bio_info *info =
 417                container_of(bio, struct dm_rq_clone_bio_info, clone);
 418
 419        info->orig = bio_orig;
 420        info->tio = tio;
 421        bio->bi_end_io = end_clone_bio;
 422
 423        return 0;
 424}
 425
 426static int setup_clone(struct request *clone, struct request *rq,
 427                       struct dm_rq_target_io *tio, gfp_t gfp_mask)
 428{
 429        int r;
 430
 431        r = blk_rq_prep_clone(clone, rq, tio->md->bs, gfp_mask,
 432                              dm_rq_bio_constructor, tio);
 433        if (r)
 434                return r;
 435
 436        clone->end_io = end_clone_request;
 437        clone->end_io_data = tio;
 438
 439        tio->clone = clone;
 440
 441        return 0;
 442}
 443
 444static void map_tio_request(struct kthread_work *work);
 445
 446static void init_tio(struct dm_rq_target_io *tio, struct request *rq,
 447                     struct mapped_device *md)
 448{
 449        tio->md = md;
 450        tio->ti = NULL;
 451        tio->clone = NULL;
 452        tio->orig = rq;
 453        tio->error = 0;
 454        tio->completed = 0;
 455        /*
 456         * Avoid initializing info for blk-mq; it passes
 457         * target-specific data through info.ptr
 458         * (see: dm_mq_init_request)
 459         */
 460        if (!md->init_tio_pdu)
 461                memset(&tio->info, 0, sizeof(tio->info));
 462        if (md->kworker_task)
 463                kthread_init_work(&tio->work, map_tio_request);
 464}
 465
 466/*
 467 * Returns:
 468 * DM_MAPIO_*       : the request has been processed as indicated
 469 * DM_MAPIO_REQUEUE : the original request needs to be immediately requeued
 470 * < 0              : the request was completed due to failure
 471 */
 472static int map_request(struct dm_rq_target_io *tio)
 473{
 474        int r;
 475        struct dm_target *ti = tio->ti;
 476        struct mapped_device *md = tio->md;
 477        struct request *rq = tio->orig;
 478        struct request *clone = NULL;
 479
 480        r = ti->type->clone_and_map_rq(ti, rq, &tio->info, &clone);
 481        switch (r) {
 482        case DM_MAPIO_SUBMITTED:
 483                /* The target has taken the I/O to submit by itself later */
 484                break;
 485        case DM_MAPIO_REMAPPED:
 486                if (setup_clone(clone, rq, tio, GFP_ATOMIC)) {
 487                        /* -ENOMEM */
 488                        ti->type->release_clone_rq(clone);
 489                        return DM_MAPIO_REQUEUE;
 490                }
 491
 492                /* The target has remapped the I/O so dispatch it */
 493                trace_block_rq_remap(clone->q, clone, disk_devt(dm_disk(md)),
 494                                     blk_rq_pos(rq));
 495                dm_dispatch_clone_request(clone, rq);
 496                break;
 497        case DM_MAPIO_REQUEUE:
 498                /* The target wants to requeue the I/O */
 499                break;
 500        case DM_MAPIO_DELAY_REQUEUE:
 501                /* The target wants to requeue the I/O after a delay */
 502                dm_requeue_original_request(tio, true);
 503                break;
 504        case DM_MAPIO_KILL:
 505                /* The target wants to complete the I/O */
 506                dm_kill_unmapped_request(rq, BLK_STS_IOERR);
 507                break;
 508        default:
 509                DMWARN("unimplemented target map return value: %d", r);
 510                BUG();
 511        }
 512
 513        return r;
 514}
 515
 516static void dm_start_request(struct mapped_device *md, struct request *orig)
 517{
 518        if (!orig->q->mq_ops)
 519                blk_start_request(orig);
 520        else
 521                blk_mq_start_request(orig);
 522        atomic_inc(&md->pending[rq_data_dir(orig)]);
 523
 524        if (md->seq_rq_merge_deadline_usecs) {
 525                md->last_rq_pos = rq_end_sector(orig);
 526                md->last_rq_rw = rq_data_dir(orig);
 527                md->last_rq_start_time = ktime_get();
 528        }
 529
 530        if (unlikely(dm_stats_used(&md->stats))) {
 531                struct dm_rq_target_io *tio = tio_from_request(orig);
 532                tio->duration_jiffies = jiffies;
 533                tio->n_sectors = blk_rq_sectors(orig);
 534                dm_stats_account_io(&md->stats, rq_data_dir(orig),
 535                                    blk_rq_pos(orig), tio->n_sectors, false, 0,
 536                                    &tio->stats_aux);
 537        }
 538
 539        /*
 540         * Hold the md reference here for the in-flight I/O.
 541         * We can't rely on the reference count by device opener,
 542         * because the device may be closed during the request completion
 543         * when all bios are completed.
 544         * See the comment in rq_completed() too.
 545         */
 546        dm_get(md);
 547}
 548
 549static int __dm_rq_init_rq(struct mapped_device *md, struct request *rq)
 550{
 551        struct dm_rq_target_io *tio = blk_mq_rq_to_pdu(rq);
 552
 553        /*
 554         * Must initialize md member of tio, otherwise it won't
 555         * be available in dm_mq_queue_rq.
 556         */
 557        tio->md = md;
 558
 559        if (md->init_tio_pdu) {
 560                /* target-specific per-io data is immediately after the tio */
 561                tio->info.ptr = tio + 1;
 562        }
 563
 564        return 0;
 565}
 566
 567static int dm_rq_init_rq(struct request_queue *q, struct request *rq, gfp_t gfp)
 568{
 569        return __dm_rq_init_rq(q->rq_alloc_data, rq);
 570}
 571
 572static void map_tio_request(struct kthread_work *work)
 573{
 574        struct dm_rq_target_io *tio = container_of(work, struct dm_rq_target_io, work);
 575
 576        if (map_request(tio) == DM_MAPIO_REQUEUE)
 577                dm_requeue_original_request(tio, false);
 578}
 579
 580ssize_t dm_attr_rq_based_seq_io_merge_deadline_show(struct mapped_device *md, char *buf)
 581{
 582        return sprintf(buf, "%u\n", md->seq_rq_merge_deadline_usecs);
 583}
 584
 585#define MAX_SEQ_RQ_MERGE_DEADLINE_USECS 100000
 586
 587ssize_t dm_attr_rq_based_seq_io_merge_deadline_store(struct mapped_device *md,
 588                                                     const char *buf, size_t count)
 589{
 590        unsigned deadline;
 591
 592        if (dm_get_md_type(md) != DM_TYPE_REQUEST_BASED)
 593                return count;
 594
 595        if (kstrtouint(buf, 10, &deadline))
 596                return -EINVAL;
 597
 598        if (deadline > MAX_SEQ_RQ_MERGE_DEADLINE_USECS)
 599                deadline = MAX_SEQ_RQ_MERGE_DEADLINE_USECS;
 600
 601        md->seq_rq_merge_deadline_usecs = deadline;
 602
 603        return count;
 604}
 605
 606static bool dm_old_request_peeked_before_merge_deadline(struct mapped_device *md)
 607{
 608        ktime_t kt_deadline;
 609
 610        if (!md->seq_rq_merge_deadline_usecs)
 611                return false;
 612
 613        kt_deadline = ns_to_ktime((u64)md->seq_rq_merge_deadline_usecs * NSEC_PER_USEC);
 614        kt_deadline = ktime_add_safe(md->last_rq_start_time, kt_deadline);
 615
 616        return !ktime_after(ktime_get(), kt_deadline);
 617}
 618
 619/*
 620 * q->request_fn for old request-based dm.
 621 * Called with the queue lock held.
 622 */
 623static void dm_old_request_fn(struct request_queue *q)
 624{
 625        struct mapped_device *md = q->queuedata;
 626        struct dm_target *ti = md->immutable_target;
 627        struct request *rq;
 628        struct dm_rq_target_io *tio;
 629        sector_t pos = 0;
 630
 631        if (unlikely(!ti)) {
 632                int srcu_idx;
 633                struct dm_table *map = dm_get_live_table(md, &srcu_idx);
 634
 635                if (unlikely(!map)) {
 636                        dm_put_live_table(md, srcu_idx);
 637                        return;
 638                }
 639                ti = dm_table_find_target(map, pos);
 640                dm_put_live_table(md, srcu_idx);
 641        }
 642
 643        /*
 644         * For suspend, check blk_queue_stopped() and increment
 645         * ->pending within a single queue_lock not to increment the
 646         * number of in-flight I/Os after the queue is stopped in
 647         * dm_suspend().
 648         */
 649        while (!blk_queue_stopped(q)) {
 650                rq = blk_peek_request(q);
 651                if (!rq)
 652                        return;
 653
 654                /* always use block 0 to find the target for flushes for now */
 655                pos = 0;
 656                if (req_op(rq) != REQ_OP_FLUSH)
 657                        pos = blk_rq_pos(rq);
 658
 659                if ((dm_old_request_peeked_before_merge_deadline(md) &&
 660                     md_in_flight(md) && rq->bio && !bio_multiple_segments(rq->bio) &&
 661                     md->last_rq_pos == pos && md->last_rq_rw == rq_data_dir(rq)) ||
 662                    (ti->type->busy && ti->type->busy(ti))) {
 663                        blk_delay_queue(q, 10);
 664                        return;
 665                }
 666
 667                dm_start_request(md, rq);
 668
 669                tio = tio_from_request(rq);
 670                init_tio(tio, rq, md);
 671                /* Establish tio->ti before queuing work (map_tio_request) */
 672                tio->ti = ti;
 673                kthread_queue_work(&md->kworker, &tio->work);
 674                BUG_ON(!irqs_disabled());
 675        }
 676}
 677
 678/*
 679 * Fully initialize a .request_fn request-based queue.
 680 */
 681int dm_old_init_request_queue(struct mapped_device *md, struct dm_table *t)
 682{
 683        struct dm_target *immutable_tgt;
 684
 685        /* Fully initialize the queue */
 686        md->queue->cmd_size = sizeof(struct dm_rq_target_io);
 687        md->queue->rq_alloc_data = md;
 688        md->queue->request_fn = dm_old_request_fn;
 689        md->queue->init_rq_fn = dm_rq_init_rq;
 690
 691        immutable_tgt = dm_table_get_immutable_target(t);
 692        if (immutable_tgt && immutable_tgt->per_io_data_size) {
 693                /* any target-specific per-io data is immediately after the tio */
 694                md->queue->cmd_size += immutable_tgt->per_io_data_size;
 695                md->init_tio_pdu = true;
 696        }
 697        if (blk_init_allocated_queue(md->queue) < 0)
 698                return -EINVAL;
 699
 700        /* disable dm_old_request_fn's merge heuristic by default */
 701        md->seq_rq_merge_deadline_usecs = 0;
 702
 703        dm_init_normal_md_queue(md);
 704        blk_queue_softirq_done(md->queue, dm_softirq_done);
 705
 706        /* Initialize the request-based DM worker thread */
 707        kthread_init_worker(&md->kworker);
 708        md->kworker_task = kthread_run(kthread_worker_fn, &md->kworker,
 709                                       "kdmwork-%s", dm_device_name(md));
 710        if (IS_ERR(md->kworker_task)) {
 711                int error = PTR_ERR(md->kworker_task);
 712                md->kworker_task = NULL;
 713                return error;
 714        }
 715
 716        elv_register_queue(md->queue);
 717
 718        return 0;
 719}
 720
 721static int dm_mq_init_request(struct blk_mq_tag_set *set, struct request *rq,
 722                unsigned int hctx_idx, unsigned int numa_node)
 723{
 724        return __dm_rq_init_rq(set->driver_data, rq);
 725}
 726
 727static blk_status_t dm_mq_queue_rq(struct blk_mq_hw_ctx *hctx,
 728                          const struct blk_mq_queue_data *bd)
 729{
 730        struct request *rq = bd->rq;
 731        struct dm_rq_target_io *tio = blk_mq_rq_to_pdu(rq);
 732        struct mapped_device *md = tio->md;
 733        struct dm_target *ti = md->immutable_target;
 734
 735        if (unlikely(!ti)) {
 736                int srcu_idx;
 737                struct dm_table *map = dm_get_live_table(md, &srcu_idx);
 738
 739                ti = dm_table_find_target(map, 0);
 740                dm_put_live_table(md, srcu_idx);
 741        }
 742
 743        if (ti->type->busy && ti->type->busy(ti))
 744                return BLK_STS_RESOURCE;
 745
 746        dm_start_request(md, rq);
 747
 748        /* Init tio using md established in .init_request */
 749        init_tio(tio, rq, md);
 750
 751        /*
 752         * Establish tio->ti before calling map_request().
 753         */
 754        tio->ti = ti;
 755
 756        /* Direct call is fine since .queue_rq allows allocations */
 757        if (map_request(tio) == DM_MAPIO_REQUEUE) {
 758                /* Undo dm_start_request() before requeuing */
 759                rq_end_stats(md, rq);
 760                rq_completed(md, rq_data_dir(rq), false);
 761                blk_mq_delay_run_hw_queue(hctx, 100/*ms*/);
 762                return BLK_STS_RESOURCE;
 763        }
 764
 765        return BLK_STS_OK;
 766}
 767
 768static const struct blk_mq_ops dm_mq_ops = {
 769        .queue_rq = dm_mq_queue_rq,
 770        .complete = dm_softirq_done,
 771        .init_request = dm_mq_init_request,
 772};
 773
 774int dm_mq_init_request_queue(struct mapped_device *md, struct dm_table *t)
 775{
 776        struct request_queue *q;
 777        struct dm_target *immutable_tgt;
 778        int err;
 779
 780        if (!dm_table_all_blk_mq_devices(t)) {
 781                DMERR("request-based dm-mq may only be stacked on blk-mq device(s)");
 782                return -EINVAL;
 783        }
 784
 785        md->tag_set = kzalloc_node(sizeof(struct blk_mq_tag_set), GFP_KERNEL, md->numa_node_id);
 786        if (!md->tag_set)
 787                return -ENOMEM;
 788
 789        md->tag_set->ops = &dm_mq_ops;
 790        md->tag_set->queue_depth = dm_get_blk_mq_queue_depth();
 791        md->tag_set->numa_node = md->numa_node_id;
 792        md->tag_set->flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE;
 793        md->tag_set->nr_hw_queues = dm_get_blk_mq_nr_hw_queues();
 794        md->tag_set->driver_data = md;
 795
 796        md->tag_set->cmd_size = sizeof(struct dm_rq_target_io);
 797        immutable_tgt = dm_table_get_immutable_target(t);
 798        if (immutable_tgt && immutable_tgt->per_io_data_size) {
 799                /* any target-specific per-io data is immediately after the tio */
 800                md->tag_set->cmd_size += immutable_tgt->per_io_data_size;
 801                md->init_tio_pdu = true;
 802        }
 803
 804        err = blk_mq_alloc_tag_set(md->tag_set);
 805        if (err)
 806                goto out_kfree_tag_set;
 807
 808        q = blk_mq_init_allocated_queue(md->tag_set, md->queue);
 809        if (IS_ERR(q)) {
 810                err = PTR_ERR(q);
 811                goto out_tag_set;
 812        }
 813        dm_init_md_queue(md);
 814
 815        /* backfill 'mq' sysfs registration normally done in blk_register_queue */
 816        err = blk_mq_register_dev(disk_to_dev(md->disk), q);
 817        if (err)
 818                goto out_cleanup_queue;
 819
 820        return 0;
 821
 822out_cleanup_queue:
 823        blk_cleanup_queue(q);
 824out_tag_set:
 825        blk_mq_free_tag_set(md->tag_set);
 826out_kfree_tag_set:
 827        kfree(md->tag_set);
 828
 829        return err;
 830}
 831
 832void dm_mq_cleanup_mapped_device(struct mapped_device *md)
 833{
 834        if (md->tag_set) {
 835                blk_mq_free_tag_set(md->tag_set);
 836                kfree(md->tag_set);
 837        }
 838}
 839
 840module_param(reserved_rq_based_ios, uint, S_IRUGO | S_IWUSR);
 841MODULE_PARM_DESC(reserved_rq_based_ios, "Reserved IOs in request-based mempools");
 842
 843module_param(use_blk_mq, bool, S_IRUGO | S_IWUSR);
 844MODULE_PARM_DESC(use_blk_mq, "Use block multiqueue for request-based DM devices");
 845
 846module_param(dm_mq_nr_hw_queues, uint, S_IRUGO | S_IWUSR);
 847MODULE_PARM_DESC(dm_mq_nr_hw_queues, "Number of hardware queues for request-based dm-mq devices");
 848
 849module_param(dm_mq_queue_depth, uint, S_IRUGO | S_IWUSR);
 850MODULE_PARM_DESC(dm_mq_queue_depth, "Queue depth for request-based dm-mq devices");
 851