diff mbox

[RFC] allow to delete sheepdog snapshot

Message ID 1448986370-32198-2-git-send-email-v.tolstov@selfip.ru
State New
Headers show

Commit Message

Vasiliy Tolstov Dec. 1, 2015, 4:12 p.m. UTC
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
---
 block/sheepdog.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 57 insertions(+), 2 deletions(-)

--
2.5.0

Comments

Hitoshi Mitake Dec. 2, 2015, 5:23 a.m. UTC | #1
On Wed, Dec 2, 2015 at 1:12 AM, Vasiliy Tolstov <v.tolstov@selfip.ru> wrote:

> Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
> ---
>  block/sheepdog.c | 59
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 57 insertions(+), 2 deletions(-)
>

Seems that your patch violates the coding style of qemu. You can check the
style with scripts/checkpatch.pl.


>
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index d80e4ed..c3fae50 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -2484,8 +2484,63 @@ static int sd_snapshot_delete(BlockDriverState *bs,
>                                const char *name,
>                                Error **errp)
>  {
> -    /* FIXME: Delete specified snapshot id.  */
> -    return 0;
> +        uint32_t snap_id = 0;
> +        uint32_t vdi = 0;
> +        char snap_tag[SD_MAX_VDI_TAG_LEN];
> +        Error *local_err = NULL;
> +        int fd, ret;
> +        char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN];
> +        BDRVSheepdogState *s = bs->opaque;
> +        unsigned int wlen = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN, rlen = 0;
> +
> +        memset(buf, 0, sizeof(buf));
> +        memset(snap_tag, 0, sizeof(snap_tag));
> +        pstrcpy(buf, SD_MAX_VDI_LEN, s->name);
> +        snap_id = strtoul(snapshot_id, NULL, 10);
> +        if (!snap_id) {
> +                pstrcpy(snap_tag, sizeof(snap_tag), snapshot_id);
> +                pstrcpy(buf + SD_MAX_VDI_LEN, SD_MAX_VDI_TAG_LEN,
> snap_tag);
> +        }
> +
> +        ret = find_vdi_name(s, s->name, snap_id, snap_tag, &vdi, true,
> &local_err);
> +        if (ret) {
> +                return ret;
> +        }
> +
> +        SheepdogVdiReq hdr = {
> +                .opcode = SD_OP_DEL_VDI,
> +                .data_length = wlen,
> +                .flags = SD_FLAG_CMD_WRITE,
> +                .snapid = snap_id,
> +        };
> +        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,
> +                     buf, &wlen, &rlen);
> +        closesocket(fd);
> +        if (ret) {
> +                return ret;
> +        }
> +
> +        switch (rsp->result) {
> +        case SD_RES_NO_VDI:
> +                error_report("%s was already deleted", s->name);
> +        case SD_RES_SUCCESS:
> +                break;
> +        default:
> +                error_report("%s, %s", sd_strerror(rsp->result), s->name);
> +                return -1;
> +        }
> +
> +//        ret = reload_inode(s, snap_id, snap_tag);
>

Comment outed code isn't good. You should remove it (in addition, it
wouldn't be required).

Thanks,
Hitoshi


> +
> +        return ret;
>  }
>
>  static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo
> **psn_tab)
> --
> 2.5.0
>
>
Vasiliy Tolstov Dec. 2, 2015, 6:43 a.m. UTC | #2
2015-12-02 8:23 GMT+03:00 Hitoshi Mitake <mitake.hitoshi@gmail.com>:
> Seems that your patch violates the coding style of qemu. You can check the
> style with scripts/checkpatch.pl.
>
>
> Comment outed code isn't good. You should remove it (in addition, it
> wouldn't be required).


Thanks!
diff mbox

Patch

diff --git a/block/sheepdog.c b/block/sheepdog.c
index d80e4ed..c3fae50 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -2484,8 +2484,63 @@  static int sd_snapshot_delete(BlockDriverState *bs,
                               const char *name,
                               Error **errp)
 {
-    /* FIXME: Delete specified snapshot id.  */
-    return 0;
+        uint32_t snap_id = 0;
+        uint32_t vdi = 0;
+        char snap_tag[SD_MAX_VDI_TAG_LEN];
+        Error *local_err = NULL;
+        int fd, ret;
+        char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN];
+        BDRVSheepdogState *s = bs->opaque;
+        unsigned int wlen = SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN, rlen = 0;
+
+        memset(buf, 0, sizeof(buf));
+        memset(snap_tag, 0, sizeof(snap_tag));
+        pstrcpy(buf, SD_MAX_VDI_LEN, s->name);
+        snap_id = strtoul(snapshot_id, NULL, 10);
+        if (!snap_id) {
+                pstrcpy(snap_tag, sizeof(snap_tag), snapshot_id);
+                pstrcpy(buf + SD_MAX_VDI_LEN, SD_MAX_VDI_TAG_LEN, snap_tag);
+        }
+
+        ret = find_vdi_name(s, s->name, snap_id, snap_tag, &vdi, true, &local_err);
+        if (ret) {
+                return ret;
+        }
+
+        SheepdogVdiReq hdr = {
+                .opcode = SD_OP_DEL_VDI,
+                .data_length = wlen,
+                .flags = SD_FLAG_CMD_WRITE,
+                .snapid = snap_id,
+        };
+        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,
+                     buf, &wlen, &rlen);
+        closesocket(fd);
+        if (ret) {
+                return ret;
+        }
+
+        switch (rsp->result) {
+        case SD_RES_NO_VDI:
+                error_report("%s was already deleted", s->name);
+        case SD_RES_SUCCESS:
+                break;
+        default:
+                error_report("%s, %s", sd_strerror(rsp->result), s->name);
+                return -1;
+        }
+
+//        ret = reload_inode(s, snap_id, snap_tag);
+
+        return ret;
 }

 static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab)