The commit a21bf27906b23448b92cca9943e1019105ffac2f makes $ dog vdi snapshot <vdi> fail if the <vdi> is an ordinal vdi because newly created VDIs have snapid 0. This patch avoids the failure with checking the VDI is snapshot or not.
Cc: Ruoyu <lian...@ucweb.com> Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp> --- dog/vdi.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dog/vdi.c b/dog/vdi.c index fa6130e..0a8a2e9 100644 --- a/dog/vdi.c +++ b/dog/vdi.c @@ -567,6 +567,7 @@ static int vdi_snapshot(int argc, char **argv) int vs_count = 0; struct node_id owners[SD_MAX_COPIES]; int nr_owners = 0, nr_issued_prevent_inode_update = 0; + bool fail_if_snapshot = false; if (vdi_cmd_data.snapshot_id != 0) { sd_err("Please specify a non-integer value for " @@ -584,6 +585,15 @@ static int vdi_snapshot(int argc, char **argv) case SD_RES_NO_TAG: break; default: + fail_if_snapshot = true; + break; + } + + ret = read_vdi_obj(vdiname, 0, "", &vid, inode, SD_INODE_HEADER_SIZE); + if (ret != EXIT_SUCCESS) + return ret; + + if (fail_if_snapshot && vdi_is_snapshot(inode)) { sd_err("Failed to create snapshot for %s, maybe " "snapshot id (%d) or tag (%s) is existed", vdiname, vdi_cmd_data.snapshot_id, @@ -591,10 +601,6 @@ static int vdi_snapshot(int argc, char **argv) return EXIT_FAILURE; } - ret = read_vdi_obj(vdiname, 0, "", &vid, inode, SD_INODE_HEADER_SIZE); - if (ret != EXIT_SUCCESS) - return ret; - if (inode->store_policy) { sd_err("creating a snapshot of hypervolume is not supported"); return EXIT_FAILURE; -- 1.8.3.2 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog