Index: xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
===================================================================
--- xen-4.0.0-testing.orig/tools/ioemu-remote/xenstore.c
+++ xen-4.0.0-testing/tools/ioemu-remote/xenstore.c
@@ -912,6 +912,18 @@ static void xenstore_process_dm_command_
         }
 
         snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
+    } else if (!strncmp(command, "snapshot-delete", len)) {
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        if (!par)
+            goto out;
+        if (delete_disk_snapshots(par) == 0)
+            xenstore_record_dm_state("snapshot-deleted");
+        free(par);
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
Index: xen-4.0.0-testing/tools/ioemu-remote/savevm.c
===================================================================
--- xen-4.0.0-testing.orig/tools/ioemu-remote/savevm.c
+++ xen-4.0.0-testing/tools/ioemu-remote/savevm.c
@@ -1096,6 +1096,35 @@ the_end:
     return ret;
 }
 
+int delete_disk_snapshots(const char* name)
+{
+    BlockDriverState *bs, *bs1;
+    int i, ret;
+
+    bs = get_bs_snapshots();
+    if (!bs) {
+        xenstore_record_dm_error("No block device supports snapshots");
+        return -1;
+    }
+
+    for(i = 0; i <= nb_drives; i++) {
+        bs1 = drives_table[i].bdrv;
+        if (bdrv_has_snapshot(bs1)) {
+            ret = bdrv_snapshot_delete(bs1, name);
+            if (ret < 0) {
+                if (ret == -ENOTSUP)
+                    fprintf(stderr, "Snapshots not supported on device '%s'\n",
+                                bdrv_get_device_name(bs1));
+                else
+                    fprintf(stderr, "Error %d while deleting snapshot on "
+                        "'%s'\n", ret, bdrv_get_device_name(bs1));
+            }
+        }
+    }
+
+    return 0;
+}
+
 #ifndef CONFIG_DM
 
 void do_savevm(const char *name)
Index: xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
===================================================================
--- xen-4.0.0-testing.orig/tools/ioemu-remote/qemu-xen.h
+++ xen-4.0.0-testing/tools/ioemu-remote/qemu-xen.h
@@ -42,6 +42,7 @@ enum {
 
 /* xen-vl-extra.c */
 int save_disk_snapshots(const char* name);
+int delete_disk_snapshots(const char* name);
 
 /* helper2.c */
 extern long time_offset;