This patch series implements some cleanup of the elevator initialization code and introduces elevator features identification and device matching to enhance checks for elevator/device compatibility and fitness. The first 3 patches of the series are simple cleanups which simplify and streamline elevator initialization for newly allocated device queues. The following two patches introduce elevator features control which allow defining features and function that an elevator supports and match these against features required by a block device driver. With this, the sysfs elevator list for a device always only shows elevators matching the features that a particular device requires, with the exception of the none elevator which has no features but is always available for use with any device. The first feature defined is for zoned block device write order control through zone write locking which prevents the use of any scheduler that does not support this feature with zoned devices. The last 2 patches of this series rework the default elevator selection and initialization to allow for the feature matching to work, simultaneously addressing cases not currently well supported, namely, multi-queue zoned block devices. Damien Le Moal (7): block: Cleanup elevator_init_mq() use block: Change elevator_init_mq() to always succeed block: Remove sysfs lock from elevator_init_rq() block: Introduce elevator features block: Introduce zoned block device elevator feature block: Improve default elevator selection block: Delay default elevator initialization block/blk-mq.c | 10 --- block/blk-settings.c | 15 ++++ block/blk.h | 2 +- block/elevator.c | 144 +++++++++++++++++++++++++--------- block/genhd.c | 3 + block/mq-deadline.c | 1 + drivers/block/null_blk_main.c | 5 ++ drivers/scsi/sd_zbc.c | 2 + include/linux/blkdev.h | 4 + include/linux/elevator.h | 8 ++ 10 files changed, 147 insertions(+), 47 deletions(-) -- 2.21.0