Index: xen-3.3.1-testing/tools/ioemu-remote/xenstore.c
===================================================================
--- xen-3.3.1-testing.orig/tools/ioemu-remote/xenstore.c
+++ xen-3.3.1-testing/tools/ioemu-remote/xenstore.c
@@ -671,6 +671,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");
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
Index: xen-3.3.1-testing/tools/ioemu-remote/xen-vl-extra.c
===================================================================
--- xen-3.3.1-testing.orig/tools/ioemu-remote/xen-vl-extra.c
+++ xen-3.3.1-testing/tools/ioemu-remote/xen-vl-extra.c
@@ -16,6 +16,8 @@ static int qemu_savevm_state(QEMUFile *f
 static int qemu_loadvm_state(QEMUFile *f);
 
 static int bdrv_can_snapshot(BlockDriverState *bs);
+static int bdrv_has_snapshot(BlockDriverState *bs);
+static BlockDriverState *get_bs_snapshots(void);
 static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
     const char *name);
 
@@ -166,6 +168,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;
+}
+
 struct qemu_alarm_timer;
 static int unix_start_timer(struct qemu_alarm_timer *t) { return 0; }
 static void unix_stop_timer(struct qemu_alarm_timer *t) { }
Index: xen-3.3.1-testing/tools/ioemu-remote/qemu-xen.h
===================================================================
--- xen-3.3.1-testing.orig/tools/ioemu-remote/qemu-xen.h
+++ xen-3.3.1-testing/tools/ioemu-remote/qemu-xen.h
@@ -22,6 +22,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;