diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index 9b1942142..a471ed502 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -388,8 +388,14 @@ int vg_remove_single(vg_t *vg) if (!archive(vg)) return 0; + if (!lock_vol(vg->cmd, VG_ORPHANS, LCK_VG_WRITE)) { + log_error("Can't get lock for orphan PVs"); + return 0; + } + if (!vg_remove(vg)) { log_error("vg_remove %s failed", vg->name); + unlock_vg(vg->cmd, VG_ORPHANS); return 0; } @@ -423,6 +429,7 @@ int vg_remove_single(vg_t *vg) else log_error("Volume group \"%s\" not properly removed", vg->name); + unlock_vg(vg->cmd, VG_ORPHANS); return ret; } diff --git a/tools/vgremove.c b/tools/vgremove.c index 1bfff1e8d..92c10fece 100644 --- a/tools/vgremove.c +++ b/tools/vgremove.c @@ -56,16 +56,9 @@ int vgremove(struct cmd_context *cmd, int argc, char **argv) return EINVALID_CMD_LINE; } - if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) { - log_error("Can't get lock for orphan PVs"); - return ECMD_FAILED; - } - ret = process_each_vg(cmd, argc, argv, READ_FOR_UPDATE, NULL, &vgremove_single); - unlock_vg(cmd, VG_ORPHANS); - return ret; }