Re: [libvirt PATCH v2] qemu: snapshot: error out early when reverting snapshot for VM with non-file disk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 06, 2025 at 14:39:41 +0100, Pavel Hrdina wrote:
> Before this patch the code would start the revert process by destroying
> the VM and preparing to revert where it would fail with following error:
> 
>     error: unsupported configuration: source for disk 'sdb' is not a regular file; refusing to generate external snapshot name
> 
> and leaving user with offline VM even if it was running.
> 
> Make the check before we start the revert process to not destroy VMs.
> 
> Resolves: https://issues.redhat.com/browse/RHEL-30971
> Resolves: https://issues.redhat.com/browse/RHEL-79928
> Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx>
> ---
> 
> Changes in v2:
>     - add comments
>     - limit the check for external snapshots
> 
>  src/qemu/qemu_snapshot.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
> index 891e67e98b..dab841ef5b 100644
> --- a/src/qemu/qemu_snapshot.c
> +++ b/src/qemu/qemu_snapshot.c
> @@ -2203,6 +2203,8 @@ qemuSnapshotRevertValidate(virDomainObj *vm,
>                             virDomainSnapshotDef *snapdef,
>                             unsigned int flags)
>  {
> +    size_t i;
> +
>      if (!vm->persistent &&
>          snapdef->state != VIR_DOMAIN_SNAPSHOT_RUNNING &&
>          snapdef->state != VIR_DOMAIN_SNAPSHOT_PAUSED &&
> @@ -2230,6 +2232,22 @@ qemuSnapshotRevertValidate(virDomainObj *vm,
>          }
>      }
>  
> +    /* Reverting to external snapshot creates overlay files for every disk and
> +     * it would fail for non-file based disks.
> +     * See qemuSnapshotRevertExternalPrepare for more details. */
> +    if (virDomainSnapshotIsExternal(snap)) {
> +        for (i = 0; i < snap->def->dom->ndisks; i++) {
> +            virDomainDiskDef *disk = snap->def->dom->disks[i];
> +
> +            if (disk->src->type != VIR_STORAGE_TYPE_FILE) {
> +                virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
> +                               _("source disk for '%1$s' is not a regular file, reverting to snapshot is not supported"),

Perhaps "not yet supported"? :)

Or you don't want to promise anything?

> +                               disk->dst);
> +                return -1;
> +            }
> +        }
> +    }
> +
>      return 0;
>  }
>  

Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux