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: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
8d47e65948
commit
c934edadcc
|
@ -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) ||
|
||||
|
|
Loading…
Reference in New Issue