diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index 17c0313c66..a089a3108b 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -291,7 +291,7 @@
A storage volume will generally be either a file or a device
node; since 1.2.0, an optional
output-only attribute type
lists the actual type
- (file, block, dir, or network), which is also available
+ (file, block, dir, network, or netdir), which is also available
from virStorageVolGetInfo()
. The storage volume
XML format is available since 0.4.1
diff --git a/docs/schemas/storagevol.rng b/docs/schemas/storagevol.rng
index f8081d9c51..8f07d8f9d6 100644
--- a/docs/schemas/storagevol.rng
+++ b/docs/schemas/storagevol.rng
@@ -20,6 +20,7 @@
block
dir
network
+ netdir
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 146a59bb9d..5aad75c18e 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -2951,6 +2951,8 @@ typedef enum {
VIR_STORAGE_VOL_BLOCK = 1, /* Block based volumes */
VIR_STORAGE_VOL_DIR = 2, /* Directory-passthrough based volume */
VIR_STORAGE_VOL_NETWORK = 3, /* Network volumes like RBD (RADOS Block Device) */
+ VIR_STORAGE_VOL_NETDIR = 4, /* Network accessible directory that can
+ * contain other network volumes */
#ifdef VIR_ENUM_SENTINELS
VIR_STORAGE_VOL_LAST
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index e675777432..22e38c13ee 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -53,7 +53,7 @@
VIR_ENUM_IMPL(virStorageVol,
VIR_STORAGE_VOL_LAST,
- "file", "block", "dir", "network")
+ "file", "block", "dir", "network", "netdir")
VIR_ENUM_IMPL(virStoragePool,
VIR_STORAGE_POOL_LAST,
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 01fe45b8b1..763417fef1 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3782,7 +3782,7 @@ qemuBuildVolumeString(virConnectPtr conn,
{
int ret = -1;
- switch (disk->srcpool->voltype) {
+ switch ((virStorageVolType) disk->srcpool->voltype) {
case VIR_STORAGE_VOL_DIR:
if (!disk->readonly) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -3825,10 +3825,12 @@ qemuBuildVolumeString(virConnectPtr conn,
}
break;
case VIR_STORAGE_VOL_NETWORK:
+ case VIR_STORAGE_VOL_NETDIR:
+ case VIR_STORAGE_VOL_LAST:
/* Keep the compiler quiet, qemuTranslateDiskSourcePool already
* reported the unsupported error.
*/
- break;
+ goto cleanup;
}
ret = 0;
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 5803850029..77df370087 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1332,7 +1332,7 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
goto cleanup;
}
- switch (info.type) {
+ switch ((virStorageVolType) info.type) {
case VIR_STORAGE_VOL_FILE:
case VIR_STORAGE_VOL_DIR:
if (!(def->src = virStorageVolGetPath(vol)))
@@ -1377,6 +1377,8 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
break;
case VIR_STORAGE_VOL_NETWORK:
+ case VIR_STORAGE_VOL_NETDIR:
+ case VIR_STORAGE_VOL_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Using network volume as disk source is not supported"));
goto cleanup;
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 510a3d6384..11cf2df3af 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -1137,7 +1137,7 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
{
virCheckFlags(0, -1);
- switch (vol->type) {
+ switch ((virStorageVolType) vol->type) {
case VIR_STORAGE_VOL_FILE:
if (unlink(vol->target.path) < 0) {
/* Silently ignore failures where the vol has already gone away */
@@ -1159,7 +1159,8 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
break;
case VIR_STORAGE_VOL_BLOCK:
case VIR_STORAGE_VOL_NETWORK:
- default:
+ case VIR_STORAGE_VOL_NETDIR:
+ case VIR_STORAGE_VOL_LAST:
virReportError(VIR_ERR_NO_SUPPORT,
_("removing block or network volumes is not supported: %s"),
vol->target.path);
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index cbdb3f0fa2..22b10d552e 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -947,7 +947,7 @@ out:
static const char *
vshVolumeTypeToString(int type)
{
- switch (type) {
+ switch ((virStorageVolType) type) {
case VIR_STORAGE_VOL_FILE:
return N_("file");
@@ -960,6 +960,9 @@ vshVolumeTypeToString(int type)
case VIR_STORAGE_VOL_NETWORK:
return N_("network");
+ case VIR_STORAGE_VOL_NETDIR:
+ return N_("netdir");
+
case VIR_STORAGE_VOL_LAST:
break;
}