Skip to content

Instantly share code, notes, and snippets.

@vtolstov
Created November 30, 2015 15:02
Show Gist options
  • Save vtolstov/0f7dad1e2f1e8bbd1d2c to your computer and use it in GitHub Desktop.
Save vtolstov/0f7dad1e2f1e8bbd1d2c to your computer and use it in GitHub Desktop.
0001-allow-to-delete-sheepdog-snapshot.patch
From d5b944f0dd678d916b91728a34c6ac200bfdd54b Mon Sep 17 00:00:00 2001
From: Vasiliy Tolstov <[email protected]>
Date: Mon, 30 Nov 2015 15:01:27 +0000
Subject: [PATCH] allow to delete sheepdog snapshot
Signed-off-by: Vasiliy Tolstov <[email protected]>
---
block/sheepdog.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 53 insertions(+), 2 deletions(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index d80e4ed..9f16d6c 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -2484,8 +2484,59 @@ static int sd_snapshot_delete(BlockDriverState *bs,
const char *name,
Error **errp)
{
- /* FIXME: Delete specified snapshot id. */
- return 0;
+ uint32_t snapid = 0;
+ uint32_t vid = 0;
+ Error *local_err = NULL;
+ int fd, ret;
+ BDRVSheepdogState *s = bs->opaque;
+ unsigned int wlen = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN, rlen = 0;
+
+ snapid = strtoul(snapshot_id, NULL, 10);
+ if (!snapid) {
+ return -1;
+ }
+
+ ret = find_vdi_name(s, name, snapid, NULL, &vid, false, &local_err);
+ if (ret) {
+ error_report_err(local_err);
+ return ret;
+ }
+
+ SheepdogVdiReq hdr = {
+ .opcode = SD_OP_DEL_VDI,
+ .base_vdi_id = vid,
+ .data_length = wlen,
+ .flags = SD_FLAG_CMD_WRITE,
+ .snapid = snapid,
+ };
+
+
+ SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr;
+
+ fd = connect_to_sdog(s, &local_err);
+ if (fd < 0) {
+ error_report_err(local_err);
+ return -1;
+ }
+
+ ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr,
+ s->name, &wlen, &rlen);
+ closesocket(fd);
+ if (ret) {
+ return ret;
+ }
+ switch (rsp->result) {
+ case SD_RES_NO_VDI:
+ error_report("%s was already deleted", name);
+ /* fall through */
+ case SD_RES_SUCCESS:
+ break;
+ default:
+ error_report("%s, %s", sd_strerror(rsp->result), name);
+ return -1;
+ }
+
+ return ret;
}
static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab)
--
2.5.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment