Created
November 30, 2015 15:02
-
-
Save vtolstov/0f7dad1e2f1e8bbd1d2c to your computer and use it in GitHub Desktop.
0001-allow-to-delete-sheepdog-snapshot.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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