diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 91e5e28759..9e594d9860 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4476,7 +4476,7 @@ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video)
 }
 
 
-static int
+int
 qemuDomainValidateStorageSource(virStorageSourcePtr src,
                                 virQEMUCapsPtr qemuCaps)
 {
@@ -8118,6 +8118,9 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
         goto cleanup;
 
     for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
+        if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
+            goto cleanup;
+
         if (qemuDomainPrepareDiskSourceData(disk, n, cfg, priv->qemuCaps) < 0)
             goto cleanup;
     }
@@ -12429,9 +12432,6 @@ qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
         src->debugLevel = cfg->glusterDebugLevel;
     }
 
-    if (qemuDomainValidateStorageSource(src, qemuCaps) < 0)
-        return -1;
-
     /* transfer properties valid for the full chain */
     src->iomode = disk->iomode;
     src->cachemode = disk->cachemode;
@@ -12482,6 +12482,9 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
 {
     qemuDomainPrepareDiskCachemode(disk);
 
+    if (qemuDomainValidateStorageSource(disk->src, priv->qemuCaps) < 0)
+        return -1;
+
     if (qemuDomainPrepareDiskSourceTLS(disk->src, cfg) < 0)
         return -1;
 
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 36b000be60..f17157b951 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -1009,6 +1009,12 @@ qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
                                 virQEMUCapsPtr qemuCaps)
     ATTRIBUTE_RETURN_CHECK;
 
+
+int
+qemuDomainValidateStorageSource(virStorageSourcePtr src,
+                                virQEMUCapsPtr qemuCaps);
+
+
 int
 qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
                             qemuDomainObjPrivatePtr priv,
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 7f39f61018..ec882b43e1 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -219,6 +219,9 @@ testQemuDiskXMLToProps(const void *opaque)
         if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
             goto cleanup;
 
+        if (qemuDomainValidateStorageSource(n, data->qemuCaps) < 0)
+            goto cleanup;
+
         if (qemuDomainPrepareDiskSourceData(disk, n, NULL, data->qemuCaps) < 0)
             goto cleanup;