summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2011-09-07 08:41:47 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2011-09-07 08:41:47 +0000
commit4144938350038b024872ca38be9233dbbdb0432f (patch)
treec320864799d4d6703666143c9daa40d1ec2fbe6b
parentbeecb1e160c5d2df1a70a5b446dfe0fa7d106ccd (diff)
downloadlvm2-4144938350038b024872ca38be9233dbbdb0432f.tar.gz
lvm2-4144938350038b024872ca38be9233dbbdb0432f.tar.xz
lvm2-4144938350038b024872ca38be9233dbbdb0432f.zip
Support break for vgchange and vgrefresh operation
Allow to break some lengthy vgchange and vgrefresh operation.
-rw-r--r--WHATS_NEW1
-rw-r--r--tools/toollib.c9
-rw-r--r--tools/vgchange.c6
3 files changed, 15 insertions, 1 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index a9bb2b43..f31ea7d9 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.89 -
==================================
+ Support break for vgchange and vgrefresh operation.
Switch int to unsigned type for pvmetadatacopies for pv_create().
Replace :space: with [\t ] for awk in vgimportclone (not widely supported).
Begin using 64-bit status field flags.
diff --git a/tools/toollib.c b/tools/toollib.c
index 49c94244..d0dffa1a 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1323,10 +1323,17 @@ int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg)
struct lv_list *lvl;
int r = 1;
- dm_list_iterate_items(lvl, &vg->lvs)
+ sigint_allow();
+ dm_list_iterate_items(lvl, &vg->lvs) {
+ if (sigint_caught())
+ return_0;
+
if (lv_is_visible(lvl->lv))
if (!lv_refresh(cmd, lvl->lv))
r = 0;
+ }
+
+ sigint_restore();
return r;
}
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 5deb1298..f36f27d4 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -90,7 +90,11 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
struct logical_volume *lv;
int count = 0, expected_count = 0;
+ sigint_allow();
dm_list_iterate_items(lvl, &vg->lvs) {
+ if (sigint_caught())
+ return_0;
+
lv = lvl->lv;
if (!lv_is_visible(lv))
@@ -160,6 +164,8 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
count++;
}
+ sigint_restore();
+
if (expected_count)
log_verbose("%s %d logical volumes in volume group %s",
(activate == CHANGE_AN || activate == CHANGE_ALN)?