- Small correctness fix in del_gendisk() if GENHD_FL_HIDDEN is used.
- Cleanup blk_unregister_queue() to more precisely protect against
concurrent sysfs changes, blk_mq_unregister_dev() now requires caller
to hold q->sysfslock (blk_unregister_queue is only caller).
- Introduce add_disk() variant, add_disk_no_queue_reg(), that allows the
gendisk to be registered but the associated disk->queue's
blk_register_queue() is left for the driver to do once its
request_queue is fully initialized. Fixes long-standing DM
request_queue initialization issues.
dm: fix incomplete request_queue initialization
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: Mike Snitzer <snitzer@redhat.com>
Tested-by: Ming Lei <ming.lei@redhat.com>
2 files changed