In a case of sudden death of qemu, tgt, and sheep, admins must unlock locked VDIs manually. This patch provides a new subcommand "dog vdi lock force-unlock" for this purpose.
Correct recovery process is like below: 1. unlock locked VDIs 2. repair them with "dog vdi check" 3. launch clients for the VDIs Cc: Fabian Zimmermann <dev....@gmail.com> Cc: Valerio Pachera <siri...@gmail.com> Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp> --- dog/vdi.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dog/vdi.c b/dog/vdi.c index 77d3661..13b0ab8 100644 --- a/dog/vdi.c +++ b/dog/vdi.c @@ -2750,8 +2750,32 @@ out: return ret; } +static int lock_force_unlock(int argc, char **argv) +{ + struct sd_req hdr; + const char *vdiname = argv[optind]; + struct vdi_tree *vdi; + + init_tree(); + if (parse_vdi(construct_vdi_tree, SD_INODE_HEADER_SIZE, NULL) < 0) + return EXIT_SYSFAIL; + + vdi = find_vdi_from_root_with_name(vdiname); + if (!vdi) { + sd_err("VDI: %s not found", vdiname); + return EXIT_SYSFAIL; + } + + sd_init_req(&hdr, SD_OP_RELEASE_VDI); + hdr.vdi.base_vdi_id = vdi->vid; + + return dog_exec_req(&sd_nid, &hdr, NULL); +} + static struct subcommand vdi_lock_cmd[] = { {"list", NULL, NULL, "list locked VDIs", NULL, 0, lock_list}, + {"force-unlock", "<vdiname>", NULL, "unlock locked VDI forcibly", NULL, 0, + lock_force_unlock}, {NULL}, }; -- 1.8.3.2 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog