diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 715c0429d7f84ea8539b15adc829c8939968f968..c9420fdb79216d7f5cbafb0e890c347daa85319b 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2647,6 +2647,11 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
}
+static int
+virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
+ virJSONValuePtr json);
+
+
static int
virStorageSourceParseBackingJSONPath(virStorageSourcePtr src,
virJSONValuePtr json,
@@ -2963,6 +2968,16 @@ virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src,
return -1;
}
+static int
+virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src,
+ virJSONValuePtr json,
+ int opaque ATTRIBUTE_UNUSED)
+{
+ /* There are no interesting attributes in raw driver.
+ * Treat it as pass-through.
+ */
+ return virStorageSourceParseBackingJSONInternal(src, json);
+}
struct virStorageSourceJSONDriverParser {
const char *drvname;
@@ -2985,6 +3000,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
{"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0},
{"ssh", virStorageSourceParseBackingJSONSSH, 0},
{"rbd", virStorageSourceParseBackingJSONRBD, 0},
+ {"raw", virStorageSourceParseBackingJSONRaw, 0},
};
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 36567753baefefc59d0f9fa76cc047384d2fa4f0..984994d8e7f79292b9fd4828ea89b9863d4046ee 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -1496,6 +1496,12 @@ mymain(void)
"\n");
+ TEST_BACKING_PARSE("json:{ \"file\": { "
+ "\"driver\": \"raw\","
+ "\"file\": {"
+ "\"driver\": \"file\","
+ "\"filename\": \"/path/to/file\" } } }",
+ "\n");
cleanup:
/* Final cleanup */