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" " \n" "\n"); + TEST_BACKING_PARSE("json:{ \"file\": { " + "\"driver\": \"raw\"," + "\"file\": {" + "\"driver\": \"file\"," + "\"filename\": \"/path/to/file\" } } }", + "\n"); cleanup: /* Final cleanup */