Rather than pulling the configuration of the storage slice into the 'format' layer make the 'slice' layer effective for raw disks with a storage slice. This was made possible by the recent refactors which made the 'format' layer optional if not needed. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/qemu/qemu_block.c | 40 +++++-------------- .../disk-slices.x86_64-latest.args | 8 ++-- 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 83954690d6..fd914d2e70 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1203,27 +1203,6 @@ qemuBlockStorageSourceGetFormatLUKSProps(virStorageSource *src, } -static int -qemuBlockStorageSourceGetFormatRawProps(virStorageSource *src, - virJSONValue *props) -{ - if (virJSONValueObjectAdd(&props, "s:driver", "raw", NULL) < 0) - return -1; - - /* Currently only storage slices are supported. We'll have to calculate - * the union of the slices here if we don't want to be adding needless - * 'raw' nodes. */ - if (src->sliceStorage && - virJSONValueObjectAdd(&props, - "U:offset", src->sliceStorage->offset, - "U:size", src->sliceStorage->size, - NULL) < 0) - return -1; - - return 0; -} - - static int qemuBlockStorageSourceGetCryptoProps(virStorageSource *src, virJSONValue **encprops) @@ -1336,8 +1315,7 @@ qemuBlockStorageSourceGetBlockdevFormatProps(virStorageSource *src) case VIR_STORAGE_FILE_FAT: /* The fat layer is emulated by the storage access layer, so we need to * put a raw layer on top */ - if (qemuBlockStorageSourceGetFormatRawProps(src, props) < 0) - return NULL; + driver = "raw"; break; case VIR_STORAGE_FILE_RAW: @@ -1345,8 +1323,7 @@ qemuBlockStorageSourceGetBlockdevFormatProps(virStorageSource *src) if (qemuBlockStorageSourceGetFormatLUKSProps(src, props) < 0) return NULL; } else { - if (qemuBlockStorageSourceGetFormatRawProps(src, props) < 0) - return NULL; + driver = "raw"; } break; @@ -3295,10 +3272,7 @@ qemuBlockStorageSourceIsRaw(const virStorageSource *src) bool qemuBlockStorageSourceNeedsStorageSliceLayer(const virStorageSource *src) { - if (!src->sliceStorage) - return false; - - return !qemuBlockStorageSourceIsRaw(src); + return !!src->sliceStorage; } @@ -3314,9 +3288,13 @@ qemuBlockStorageSourceNeedsStorageSliceLayer(const virStorageSource *src) * existence of the format layer nodename. */ bool -qemuBlockStorageSourceNeedsFormatLayer(const virStorageSource *src G_GNUC_UNUSED) +qemuBlockStorageSourceNeedsFormatLayer(const virStorageSource *src) { - /* Currently we always create a 'format' layer */ + /* Skip 'format' layer, when a storage slice for a raw image is in use */ + if (qemuBlockStorageSourceIsRaw(src) && + src->sliceStorage) + return false; + return true; } diff --git a/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args b/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args index 363f0c0361..c28eeb827e 100644 --- a/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args +++ b/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args @@ -28,8 +28,8 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -boot strict=on \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ -blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/raw.img","node-name":"libvirt-6-storage","auto-read-only":true,"discard":"unmap"}' \ --blockdev '{"node-name":"libvirt-6-format","read-only":false,"driver":"raw","offset":0,"size":321,"file":"libvirt-6-storage"}' \ --device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x2","drive":"libvirt-6-format","id":"virtio-disk0","bootindex":1}' \ +-blockdev '{"driver":"raw","offset":0,"size":321,"file":"libvirt-6-storage","node-name":"libvirt-6-slice-sto","read-only":false}' \ +-device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x2","drive":"libvirt-6-slice-sto","id":"virtio-disk0","bootindex":1}' \ -blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/raw.img","node-name":"libvirt-5-storage","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"driver":"raw","offset":9876,"size":123456789,"file":"libvirt-5-storage","node-name":"libvirt-5-slice-sto","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"node-name":"libvirt-5-format","read-only":true,"driver":"qcow2","file":"libvirt-5-slice-sto","backing":null}' \ @@ -42,8 +42,8 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"luks","key-secret":"libvirt-3-format-encryption-secret0","file":"libvirt-3-slice-sto"}' \ -device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x4","drive":"libvirt-3-format","id":"virtio-disk2"}' \ -blockdev '{"driver":"nvme","device":"0000:02:00.0","namespace":1,"node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ --blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","offset":1234,"size":321,"file":"libvirt-2-storage"}' \ --device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x6","drive":"libvirt-2-format","id":"virtio-disk3"}' \ +-blockdev '{"driver":"raw","offset":1234,"size":321,"file":"libvirt-2-storage","node-name":"libvirt-2-slice-sto","read-only":false}' \ +-device '{"driver":"virtio-blk-pci","bus":"pci.0","addr":"0x6","drive":"libvirt-2-slice-sto","id":"virtio-disk3"}' \ -object '{"qom-type":"secret","id":"libvirt-1-format-encryption-secret0","data":"9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1","keyid":"masterKey0","iv":"AAECAwQFBgcICQoLDA0ODw==","format":"base64"}' \ -blockdev '{"driver":"nvme","device":"0001:02:00.0","namespace":2,"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap","cache":{"direct":true,"no-flush":false}}' \ -blockdev '{"driver":"raw","offset":1234,"size":321,"file":"libvirt-1-storage","node-name":"libvirt-1-slice-sto","auto-read-only":true,"discard":"unmap","cache":{"direct":true,"no-flush":false}}' \ -- 2.43.0 _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx