diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 5b72b7f7bf0a785f3e52eeb1f26ae874d79cefef..d71d9b327347931e797902af342dc85ad8805b25 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -14217,10 +14217,16 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
{
qemuDomainPrepareDiskCachemode(disk);
- /* add raw file format if the storage pool did not fill it in */
+ /* set default format for storage pool based disks */
if (disk->src->type == VIR_STORAGE_TYPE_VOLUME &&
- disk->src->format <= VIR_STORAGE_FILE_NONE)
- disk->src->format = VIR_STORAGE_FILE_RAW;
+ disk->src->format <= VIR_STORAGE_FILE_NONE) {
+ int actualType = virStorageSourceGetActualType(disk->src);
+
+ if (actualType == VIR_STORAGE_TYPE_DIR)
+ disk->src->format = VIR_STORAGE_FILE_FAT;
+ else
+ disk->src->format = VIR_STORAGE_FILE_RAW;
+ }
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
if (qemuDomainPrepareDiskSourceBlockdev(disk, priv, cfg) < 0)
diff --git a/tests/qemuxml2argvdata/disk-source-pool.args b/tests/qemuxml2argvdata/disk-source-pool.args
index 65565fe49e9123385213649fe16ec70f6b8c0f58..7c055998225fe6445cdf521b70445a02826ed083 100644
--- a/tests/qemuxml2argvdata/disk-source-pool.args
+++ b/tests/qemuxml2argvdata/disk-source-pool.args
@@ -36,4 +36,8 @@ readonly=on \
readonly=on \
-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
id=virtio-disk0 \
+-drive file=fat:/some/dir/device/vol2,if=none,id=drive-virtio-disk1,\
+readonly=on \
+-device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\
+id=virtio-disk1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/disk-source-pool.xml b/tests/qemuxml2argvdata/disk-source-pool.xml
index 96bcae9a579bded0ac3bc9c3419e12f85e8f4ec2..31b148b4bb470d336f83c949651de5e9926e0aa7 100644
--- a/tests/qemuxml2argvdata/disk-source-pool.xml
+++ b/tests/qemuxml2argvdata/disk-source-pool.xml
@@ -43,6 +43,12 @@