Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c934edad authored by Mike Snitzer's avatar Mike Snitzer
Browse files

dm table: allow upgrade from bio-based to specialized bio-based variant



In practice this is really only meaningful in the context of the DM
multipath target (which uses dm_table_set_type() to set the type of
device DM should create via its "queue_mode" option).

So this change allows a DM multipath device with "queue_mode bio" to be
upgraded from DM_TYPE_BIO_BASED to DM_TYPE_NVME_BIO_BASED -- iff the
underlying device(s) are NVMe.

DM_TYPE_NVME_BIO_BASED is just a DM core implementation detail that
allows for NVMe-specific optimizations (e.g. use direct_make_request
instead of generic_make_request).  If in the future there is no benefit
or need to distinguish NVMe vs not: then it will be removed.

Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 8d47e659
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -942,17 +942,12 @@ static int dm_table_determine_type(struct dm_table *t)

	if (t->type != DM_TYPE_NONE) {
		/* target already set the table's type */
		if (t->type == DM_TYPE_BIO_BASED)
			return 0;
		else if (t->type == DM_TYPE_NVME_BIO_BASED) {
			if (!dm_table_does_not_support_partial_completion(t)) {
				DMERR("nvme bio-based is only possible with devices"
				      " that don't support partial completion");
				return -EINVAL;
			}
			/* Fallthru, also verify all devices are blk-mq */
		if (t->type == DM_TYPE_BIO_BASED) {
			/* possibly upgrade to a variant of bio-based */
			goto verify_bio_based;
		}
		BUG_ON(t->type == DM_TYPE_DAX_BIO_BASED);
		BUG_ON(t->type == DM_TYPE_NVME_BIO_BASED);
		goto verify_rq_based;
	}

@@ -985,6 +980,7 @@ static int dm_table_determine_type(struct dm_table *t)
	}

	if (bio_based) {
verify_bio_based:
		/* We must use this table as bio-based */
		t->type = DM_TYPE_BIO_BASED;
		if (dm_table_supports_dax(t) ||