Commit 67838115 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: better split mq vs non-mq code in add_disk_fwnode



Add a big conditional for blk-mq vs not mq at the beginning of
add_disk_fwnode so that elevator_init_mq is only called for blk-mq disks,
and add checks that the right methods or set or not set based on the
queue type.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250106083531.799976-2-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent b7175e24
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -400,21 +400,23 @@ int __must_check add_disk_fwnode(struct device *parent, struct gendisk *disk,
	struct device *ddev = disk_to_dev(disk);
	int ret;

	/* Only makes sense for bio-based to set ->poll_bio */
	if (queue_is_mq(disk->queue) && disk->fops->poll_bio)
	if (queue_is_mq(disk->queue)) {
		/*
		 * ->submit_bio and ->poll_bio are bypassed for blk-mq drivers.
		 */
		if (disk->fops->submit_bio || disk->fops->poll_bio)
			return -EINVAL;

		/*
	 * The disk queue should now be all set with enough information about
	 * the device for the elevator code to pick an adequate default
	 * elevator if one is needed, that is, for devices requesting queue
	 * registration.
		 * Initialize the I/O scheduler code and pick a default one if
		 * needed.
		 */
		elevator_init_mq(disk->queue);

	/* Mark bdev as having a submit_bio, if needed */
	if (disk->fops->submit_bio)
	} else {
		if (!disk->fops->submit_bio)
			return -EINVAL;
		bdev_set_flag(disk->part0, BD_HAS_SUBMIT_BIO);
	}

	/*
	 * If the driver provides an explicit major number it also must provide