From: ray <honglei.wang(a)smartx.com>
This patch extends the previous NVMe disk bus support by introducing a new
nvme-ns bus type.
The nvme-ns bus disk needs to be attached to nvme controller. A controller
can contain multiple nvme-ns disk devices.
Key changes include:
- Add VIR_DOMAIN_DISK_BUS_NVME_NS to disk bus
- Add VIR_DOMAIN_CONTROLLER_TYPE_NVME to controller type
- Update driver-specific functions to handle nvme-ns disks
- Modify disk name parsing to recognize 'nvmens' prefix
- Add support for NVMe namespace-specific addressing and controller handling
- Implement NVMe controller serial number parsing and formatting
Signed-off-by: ray <honglei.wang(a)smartx.com>
---
src/conf/domain_conf.c | 39 +++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 7 +++++++
src/conf/domain_postparse.c | 2 ++
src/conf/domain_validate.c | 1 +
src/conf/virconftypes.h | 2 ++
src/hyperv/hyperv_driver.c | 2 ++
src/qemu/qemu_alias.c | 1 +
src/qemu/qemu_command.c | 26 ++++++++++++++++++++++++++
src/qemu/qemu_domain_address.c | 5 +++++
src/qemu/qemu_hotplug.c | 8 ++++++++
src/qemu/qemu_postparse.c | 1 +
src/qemu/qemu_validate.c | 12 ++++++++++++
src/test/test_driver.c | 2 ++
src/util/virutil.c | 2 +-
src/vbox/vbox_common.c | 2 ++
src/vmx/vmx.c | 1 +
16 files changed, 112 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index bc101cca0e..d21cf404e2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -373,6 +373,7 @@ VIR_ENUM_IMPL(virDomainDiskBus,
"sata",
"sd",
"nvme",
+ "nvme-ns",
);
VIR_ENUM_IMPL(virDomainDiskCache,
@@ -421,6 +422,7 @@ VIR_ENUM_IMPL(virDomainController,
"pci",
"xenbus",
"isa",
+ "nvme",
);
VIR_ENUM_IMPL(virDomainControllerModelPCI,
@@ -2545,6 +2547,7 @@ virDomainControllerDefNew(virDomainControllerType type)
case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
break;
}
@@ -6773,6 +6776,14 @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt
G_GNUC_UNUSED,
def->info.addr.drive.unit = idx % 2;
break;
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
+ /* For NVME-NS, each nvme controller has a maximum of 256 nvme-ns */
+ def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE;
+ def->info.addr.drive.controller = idx / 256;
+ def->info.addr.drive.bus = 0;
+ def->info.addr.drive.unit = idx % 256;
+ break;
+
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_VIRTIO:
case VIR_DOMAIN_DISK_BUS_XEN:
@@ -8513,6 +8524,7 @@ virDomainControllerModelTypeFromString(const virDomainControllerDef
*def,
case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
return -1;
}
@@ -8541,6 +8553,7 @@ virDomainControllerModelTypeToString(virDomainControllerDef *def,
case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
return NULL;
}
@@ -8561,6 +8574,8 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
int ntargetNodes = 0;
g_autofree xmlNodePtr *modelNodes = NULL;
int nmodelNodes = 0;
+ g_autofree xmlNodePtr *serialNodes = NULL;
+ int nserialNodes = 0;
int numaNode = -1;
int ports;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
@@ -8696,6 +8711,18 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
if (virXMLPropInt(node, "ports", 10, VIR_XML_PROP_NONNEGATIVE, &ports,
-1) < 0)
return NULL;
+ if ((nserialNodes = virXPathNodeSet("./serial", ctxt, &serialNodes))
> 1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("Multiple <serial> elements in controller definition
not allowed"));
+ return NULL;
+ }
+
+ if (nserialNodes == 1) {
+ if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_NVME) {
+ def->opts.nvmeopts.serial = virXMLNodeContentString(serialNodes[0]);
+ }
+ }
+
switch (def->type) {
case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: {
if (virXMLPropInt(node, "vectors", 10, VIR_XML_PROP_NONNEGATIVE,
@@ -8781,6 +8808,7 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
default:
break;
@@ -14718,6 +14746,10 @@ virDomainDiskControllerMatch(int controller_type, int disk_bus)
disk_bus == VIR_DOMAIN_DISK_BUS_SATA)
return true;
+ if (controller_type == VIR_DOMAIN_CONTROLLER_TYPE_NVME &&
+ disk_bus == VIR_DOMAIN_DISK_BUS_NVME_NS)
+ return true;
+
return false;
}
@@ -23650,6 +23682,12 @@ virDomainControllerDefFormat(virBuffer *buf,
}
break;
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
+ if (def->opts.nvmeopts.serial != NULL) {
+ virBufferAsprintf(&childBuf,
"<serial>%s</serial>\n", def->opts.nvmeopts.serial);
+ }
+ break;
+
case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
if (virDomainControllerDefFormatPCI(&childBuf, def, flags) < 0)
return -1;
@@ -29204,6 +29242,7 @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk,
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_LAST:
default:
*busIdx = 0;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 5cde6783c2..66e1876d08 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -402,6 +402,7 @@ typedef enum {
VIR_DOMAIN_DISK_BUS_SATA,
VIR_DOMAIN_DISK_BUS_SD,
VIR_DOMAIN_DISK_BUS_NVME,
+ VIR_DOMAIN_DISK_BUS_NVME_NS,
VIR_DOMAIN_DISK_BUS_LAST
} virDomainDiskBus;
@@ -600,6 +601,7 @@ typedef enum {
VIR_DOMAIN_CONTROLLER_TYPE_PCI,
VIR_DOMAIN_CONTROLLER_TYPE_XENBUS,
VIR_DOMAIN_CONTROLLER_TYPE_ISA,
+ VIR_DOMAIN_CONTROLLER_TYPE_NVME,
VIR_DOMAIN_CONTROLLER_TYPE_LAST
} virDomainControllerType;
@@ -755,6 +757,10 @@ struct _virDomainXenbusControllerOpts {
int maxEventChannels; /* -1 == undef */
};
+struct _virDomainNVMeControllerOpts {
+ char *serial;
+};
+
/* Stores the virtual disk controller configuration */
struct _virDomainControllerDef {
virDomainControllerType type;
@@ -770,6 +776,7 @@ struct _virDomainControllerDef {
virDomainPCIControllerOpts pciopts;
virDomainUSBControllerOpts usbopts;
virDomainXenbusControllerOpts xenbusopts;
+ virDomainNVMeControllerOpts nvmeopts;
} opts;
virDomainDeviceInfo info;
virDomainVirtioOptions *virtio;
diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c
index a07ec8d94e..e1fbcef485 100644
--- a/src/conf/domain_postparse.c
+++ b/src/conf/domain_postparse.c
@@ -523,6 +523,8 @@ virDomainDiskDefPostParse(virDomainDiskDef *disk,
disk->bus = VIR_DOMAIN_DISK_BUS_XEN;
else if (STRPREFIX(disk->dst, "ubd"))
disk->bus = VIR_DOMAIN_DISK_BUS_UML;
+ else if (STRPREFIX(disk->dst, "nvmens"))
+ disk->bus = VIR_DOMAIN_DISK_BUS_NVME_NS;
else if (STRPREFIX(disk->dst, "nvme"))
disk->bus = VIR_DOMAIN_DISK_BUS_NVME;
}
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 4c96d7cacd..0ad33d08df 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -268,6 +268,7 @@ virDomainDiskAddressDiskBusCompatibility(virDomainDiskBus bus,
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_LAST:
return true;
}
diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h
index 59be61cea4..83018ad364 100644
--- a/src/conf/virconftypes.h
+++ b/src/conf/virconftypes.h
@@ -272,6 +272,8 @@ typedef struct _virDomainXMLPrivateDataCallbacks
virDomainXMLPrivateDataCallback
typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpts;
+typedef struct _virDomainNVMeControllerOpts virDomainNVMeControllerOpts;
+
typedef enum {
VIR_DOMAIN_DISK_IO_DEFAULT = 0,
VIR_DOMAIN_DISK_IO_NATIVE,
diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 708e10b7dc..e932a5e8a7 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -949,6 +949,7 @@ hypervDomainAttachStorage(virDomainPtr domain, virDomainDef *def,
const char *ho
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_LAST:
default:
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported
controller type"));
@@ -3092,6 +3093,7 @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
unsigned int
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_LAST:
default:
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid disk
bus in definition"));
diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
index 9d39ebd63d..894274f890 100644
--- a/src/qemu/qemu_alias.c
+++ b/src/qemu/qemu_alias.c
@@ -259,6 +259,7 @@ qemuAssignDeviceDiskAlias(virDomainDef *def,
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SCSI:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
diskPriv->qomName = g_strdup(disk->info.alias);
break;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 7b33fa1bec..7a766228db 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -537,6 +537,17 @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props,
}
break;
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
+ if (!(controllerAlias = virDomainControllerAliasFind(domainDef,
+
VIR_DOMAIN_CONTROLLER_TYPE_NVME,
+
info->addr.drive.controller)))
+ return -1;
+
+ if (virJSONValueObjectAdd(&props,
+ "s:bus", controllerAlias,
+ NULL) < 0)
+ return -1;
+ break;
case VIR_DOMAIN_DISK_BUS_VIRTIO:
case VIR_DOMAIN_DISK_BUS_USB:
@@ -1738,6 +1749,10 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
driver = "nvme";
break;
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
+ driver = "nvme-ns";
+ break;
+
case VIR_DOMAIN_DISK_BUS_XEN:
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SD:
@@ -2775,6 +2790,16 @@ qemuBuildControllerDevProps(const virDomainDef *domainDef,
break;
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
+ if (virJSONValueObjectAdd(&props,
+ "s:driver", "nvme",
+ "s:id", def->info.alias,
+ "s:serial", def->opts.nvmeopts.serial,
+ NULL) < 0)
+ return -1;
+
+ break;
+
case VIR_DOMAIN_CONTROLLER_TYPE_IDE:
case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
@@ -2937,6 +2962,7 @@ qemuBuildControllersCommandLine(virCommand *cmd,
VIR_DOMAIN_CONTROLLER_TYPE_IDE,
VIR_DOMAIN_CONTROLLER_TYPE_SATA,
VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL,
+ VIR_DOMAIN_CONTROLLER_TYPE_NVME,
};
for (i = 0; i < G_N_ELEMENTS(contOrder); i++) {
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index df17afb5b9..ac5ccf8f2a 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -616,6 +616,9 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
}
break;
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
+ return pciFlags;
+
case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
@@ -741,6 +744,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_LAST:
return 0;
@@ -1922,6 +1926,7 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDef *def,
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 2673c6818a..301f2fc704 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1053,6 +1053,7 @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver,
/* Note that SD card hotplug support should be added only once
* they support '-device' (don't require -drive only).
* See also: qemuDiskBusIsSD */
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
@@ -5733,6 +5734,7 @@ qemuDomainDetachPrepDisk(virDomainObj *vm,
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("This type of disk cannot be hot unplugged"));
return -1;
@@ -5807,6 +5809,11 @@ qemuDomainDiskControllerIsBusy(virDomainObj *vm,
continue;
break;
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
+ if (disk->bus != VIR_DOMAIN_DISK_BUS_NVME_NS)
+ continue;
+ break;
+
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
/* xenbus is not supported by the qemu driver */
continue;
@@ -5863,6 +5870,7 @@ qemuDomainControllerIsBusy(virDomainObj *vm,
case VIR_DOMAIN_CONTROLLER_TYPE_USB:
case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
/* detach of the controller types above is not yet supported */
return false;
diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c
index 49009ae2e4..1513489ab0 100644
--- a/src/qemu/qemu_postparse.c
+++ b/src/qemu/qemu_postparse.c
@@ -429,6 +429,7 @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont,
case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index e7e00fa761..ffa9dcd3cc 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -2823,6 +2823,7 @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDomainDef *def,
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("IOThreads not available for bus %1$s target %2$s"),
@@ -3038,6 +3039,7 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef
*disk,
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk device='lun' is not supported for
bus='%1$s'"),
virDomainDiskBusTypeToString(disk->bus));
@@ -3166,6 +3168,14 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef
*disk,
}
break;
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
+ if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("unexpected address type for nvme-ns disk"));
+ return -1;
+ }
+ break;
+
case VIR_DOMAIN_DISK_BUS_XEN:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NONE:
@@ -3355,6 +3365,7 @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef
*disk,
case VIR_DOMAIN_DISK_BUS_VIRTIO:
case VIR_DOMAIN_DISK_BUS_SCSI:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
break;
case VIR_DOMAIN_DISK_BUS_IDE:
@@ -4356,6 +4367,7 @@ qemuValidateDomainDeviceDefController(const virDomainControllerDef
*controller,
case VIR_DOMAIN_CONTROLLER_TYPE_USB:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
break;
}
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 30eec56941..0b6a57d595 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -10345,6 +10345,7 @@ testDomainAttachDeviceDiskLiveInternal(testDriver *driver
G_GNUC_UNUSED,
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
@@ -10794,6 +10795,7 @@ testDomainDetachPrepDisk(virDomainObj *vm,
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SATA:
case VIR_DOMAIN_DISK_BUS_SD:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("This type of disk cannot be hot unplugged"));
return -1;
diff --git a/src/util/virutil.c b/src/util/virutil.c
index 521c91d043..249d5e803b 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -327,7 +327,7 @@ int virDiskNameParse(const char *name, int *disk, int *partition)
const char *ptr = NULL;
char *rem;
int idx = 0;
- static char const* const drive_prefix[] = {"fd", "hd",
"vd", "sd", "xvd", "ubd", "nvme"};
+ static char const* const drive_prefix[] = {"fd", "hd",
"vd", "sd", "xvd", "ubd", "nvmens",
"nvme"};
size_t i;
size_t n_digits;
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index f0e88874da..16cf2928b6 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -494,6 +494,7 @@ vboxSetStorageController(virDomainControllerDef *controller,
case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS:
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
+ case VIR_DOMAIN_CONTROLLER_TYPE_NVME:
case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("The vbox driver does not support %1$s controller
type"),
@@ -1239,6 +1240,7 @@ vboxAttachDrives(virDomainDef *def, struct _vboxDriver *data,
IMachine *machine)
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
case VIR_DOMAIN_DISK_BUS_NONE:
case VIR_DOMAIN_DISK_BUS_LAST:
vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index b66aeea5c5..cd8c1f6c59 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -2250,6 +2250,7 @@ virVMXGenerateDiskTarget(virDomainDiskDef *def,
case VIR_DOMAIN_DISK_BUS_UML:
case VIR_DOMAIN_DISK_BUS_SD:
case VIR_DOMAIN_DISK_BUS_NVME:
+ case VIR_DOMAIN_DISK_BUS_NVME_NS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported bus type '%1$s' for device type
'%2$s'"),
virDomainDiskBusTypeToString(def->bus),
--
2.11.0