1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Return error status if vgchange fails to activate some volume.

(on one node a storage connection failed):

# vgchange -a y vg_bar ; echo $?
  Error locking on node bar-02: Refusing activation of partial LV lv1. Use --partial to override.
    1 logical volume(s) in volume group "vg_bar" now active
    0

So activation fails on one node, error is correctly printed but
status code is wrong.

This patch fixes the top level (vgchange) to return proper code
(and print # of activated LVs).

(lvchange returns error properly here.)
This commit is contained in:
Milan Broz 2009-11-24 16:08:49 +00:00
parent 6b8304ab43
commit 155c608cd3
2 changed files with 13 additions and 11 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.56 - Version 2.02.56 -
==================================== ====================================
Return error status if vgchange fails to activate some volume.
Fix memory lock imbalance in locking code. Fix memory lock imbalance in locking code.
Revert vg_read_internal change, clvmd cannot use vg_read now. (2.02.55) Revert vg_read_internal change, clvmd cannot use vg_read now. (2.02.55)

View File

@ -56,7 +56,7 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
{ {
struct lv_list *lvl; struct lv_list *lvl;
struct logical_volume *lv; struct logical_volume *lv;
int count = 0; int count = 0, expected_count = 0;
dm_list_iterate_items(lvl, &vg->lvs) { dm_list_iterate_items(lvl, &vg->lvs) {
lv = lvl->lv; lv = lvl->lv;
@ -78,6 +78,8 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
((lv->status & PVMOVE) )) ((lv->status & PVMOVE) ))
continue; continue;
expected_count++;
if (activate == CHANGE_AN) { if (activate == CHANGE_AN) {
if (!deactivate_lv(cmd, lv)) if (!deactivate_lv(cmd, lv))
continue; continue;
@ -100,7 +102,12 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
count++; count++;
} }
return count; if (expected_count)
log_verbose("%s %d logical volumes in volume group %s",
activate ? "Activated" : "Deactivated",
count, vg->name);
return (expected_count != count) ? ECMD_FAILED : ECMD_PROCESSED;
} }
static int _vgchange_monitoring(struct cmd_context *cmd, struct volume_group *vg) static int _vgchange_monitoring(struct cmd_context *cmd, struct volume_group *vg)
@ -121,7 +128,7 @@ static int _vgchange_monitoring(struct cmd_context *cmd, struct volume_group *vg
static int _vgchange_available(struct cmd_context *cmd, struct volume_group *vg) static int _vgchange_available(struct cmd_context *cmd, struct volume_group *vg)
{ {
int lv_open, active, monitored; int lv_open, active, monitored;
int available; int available, ret;
int activate = 1; int activate = 1;
/* /*
@ -158,17 +165,11 @@ static int _vgchange_available(struct cmd_context *cmd, struct volume_group *vg)
} }
} }
if (activate && _activate_lvs_in_vg(cmd, vg, available)) ret = _activate_lvs_in_vg(cmd, vg, available);
log_verbose("Activated logical volumes in "
"volume group \"%s\"", vg->name);
if (!activate && _activate_lvs_in_vg(cmd, vg, available))
log_verbose("Deactivated logical volumes in "
"volume group \"%s\"", vg->name);
log_print("%d logical volume(s) in volume group \"%s\" now active", log_print("%d logical volume(s) in volume group \"%s\" now active",
lvs_in_vg_activated(vg), vg->name); lvs_in_vg_activated(vg), vg->name);
return ECMD_PROCESSED; return ret;
} }
static int _vgchange_alloc(struct cmd_context *cmd, struct volume_group *vg) static int _vgchange_alloc(struct cmd_context *cmd, struct volume_group *vg)