• Mike Snitzer's avatar
    dm: fix incomplete request_queue initialization · c100ec49
    Mike Snitzer authored
    DM is no longer prone to having its request_queue be improperly
    initialized.
    
    Summary of changes:
    
    - defer DM's blk_register_queue() from add_disk()-time until
      dm_setup_md_queue() by using add_disk_no_queue_reg() in alloc_dev().
    
    - dm_setup_md_queue() is updated to fully initialize DM's request_queue
      (_after_ all table loads have occurred and the request_queue's type,
      features and limits are known).
    
    A very welcome side-effect of these changes is DM no longer needs to:
    1) backfill the "mq" sysfs entry (because historically DM didn't
    initialize the request_queue to use blk-mq until _after_
    blk_register_queue() was called via add_disk()).
    2) call elv_register_queue() to get .request_fn request-based DM
    device's "iosched" exposed in syfs.
    
    In addition, blk-mq debugfs support is now made available because
    request-based DM's blk-mq request_queue is now properly initialized
    before dm_setup_md_queue() calls blk_register_queue().
    
    These changes also stave off the need to introduce new DM-specific
    workarounds in block core, e.g. this proposal:
    https://patchwork.kernel.org/patch/10067961/
    
    In the end DM devices should be less unicorn in nature (relative to
    initialization and availability of block core infrastructure provided by
    the request_queue).
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Tested-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    c100ec49
dm.c 68.3 KB