summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2010-03-23 22:30:18 +0000
committerMike Snitzer <snitzer@redhat.com>2010-03-23 22:30:18 +0000
commita6bc975a2449fd3a1013acb77cb02600a087c2b7 (patch)
tree1c7f1b7d7eeb577cd923549f6e239307ca7c0216 /tools
parenta2b6bbdfb28dbb760b5df76c7c1c75c96e40ea38 (diff)
downloadlvm2-a6bc975a2449fd3a1013acb77cb02600a087c2b7.tar.gz
lvm2-a6bc975a2449fd3a1013acb77cb02600a087c2b7.tar.xz
lvm2-a6bc975a2449fd3a1013acb77cb02600a087c2b7.zip
Improve activation monitoring option processing
. Add "monitoring" option to "activation" section of lvm.conf . Have clvmd consult the lvm.conf "activation/monitoring" too. . Introduce toollib.c:get_activation_monitoring_mode(). . Error out when both --monitor and --ignoremonitoring are provided. . Add --monitor and --ignoremonitoring support to lvcreate. Update lvcreate man page accordingly. . Clarify that '--monitor' controls the start and stop of monitoring in the {vg,lv}change man pages. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/commands.h14
-rw-r--r--tools/lvchange.c9
-rw-r--r--tools/lvcreate.c3
-rw-r--r--tools/toollib.c21
-rw-r--r--tools/toollib.h3
-rw-r--r--tools/vgchange.c9
6 files changed, 46 insertions, 13 deletions
diff --git a/tools/commands.h b/tools/commands.h
index ad0b385e..58d6d7b9 100644
--- a/tools/commands.h
+++ b/tools/commands.h
@@ -150,6 +150,8 @@ xx(lvcreate,
"\t[-C|--contiguous {y|n}]\n"
"\t[-d|--debug]\n"
"\t[-h|-?|--help]\n"
+ "\t[--ignoremonitoring]\n"
+ "\t[--monitor {y|n}]\n"
"\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n"
"\t{-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] |\n"
"\t -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n"
@@ -177,6 +179,8 @@ xx(lvcreate,
"\t[-C|--contiguous {y|n}]\n"
"\t[-d|--debug]\n"
"\t[-h|-?|--help]\n"
+ "\t[--ignoremonitoring]\n"
+ "\t[--monitor {y|n}]\n"
"\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n"
"\t{-l|--extents LogicalExtentsNumber[%{VG|FREE|ORIGIN}] |\n"
"\t -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n"
@@ -192,11 +196,11 @@ xx(lvcreate,
"\t[PhysicalVolumePath...]\n\n",
addtag_ARG, alloc_ARG, autobackup_ARG, chunksize_ARG, contiguous_ARG,
- corelog_ARG, extents_ARG, major_ARG, minor_ARG, mirrorlog_ARG, mirrors_ARG,
- name_ARG, nosync_ARG, noudevsync_ARG, permission_ARG, persistent_ARG,
- readahead_ARG, regionsize_ARG, size_ARG, snapshot_ARG, stripes_ARG,
- stripesize_ARG, test_ARG, type_ARG, virtualoriginsize_ARG, virtualsize_ARG,
- zero_ARG)
+ corelog_ARG, extents_ARG, ignoremonitoring_ARG, major_ARG, minor_ARG,
+ mirrorlog_ARG, mirrors_ARG, monitor_ARG, name_ARG, nosync_ARG, noudevsync_ARG,
+ permission_ARG, persistent_ARG, readahead_ARG, regionsize_ARG, size_ARG,
+ snapshot_ARG, stripes_ARG, stripesize_ARG, test_ARG, type_ARG,
+ virtualoriginsize_ARG, virtualsize_ARG, zero_ARG)
xx(lvdisplay,
"Display information about a logical volume",
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 2d7955e8..534c9930 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -518,7 +518,7 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
void *handle __attribute((unused)))
{
int doit = 0, docmds = 0;
- int archived = 0;
+ int dmeventd_mode, archived = 0;
struct logical_volume *origin;
if (!(lv->vg->status & LVM_WRITE) &&
@@ -575,9 +575,10 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
return ECMD_FAILED;
}
- init_dmeventd_monitor(arg_int_value(cmd, monitor_ARG,
- (is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
- DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
+ if (!get_activation_monitoring_mode(cmd, &dmeventd_mode))
+ return ECMD_FAILED;
+
+ init_dmeventd_monitor(dmeventd_mode);
/*
* FIXME: DEFAULT_BACKGROUND_POLLING should be "unspecified".
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 211cfebb..10b5aa59 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -482,6 +482,9 @@ static int _lvcreate_params(struct lvcreate_params *lp,
return 0;
}
+ if (!get_activation_monitoring_mode(cmd, &lp->activation_monitoring))
+ return_0;
+
if (!_lvcreate_name_params(lp, cmd, &argc, &argv) ||
!_read_size_params(lp, lcp, cmd) ||
!_read_stripe_params(lp, cmd) ||
diff --git a/tools/toollib.c b/tools/toollib.c
index 54701692..b1528e25 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1423,3 +1423,24 @@ int pvcreate_params_validate(struct cmd_context *cmd,
return 1;
}
+int get_activation_monitoring_mode(struct cmd_context *cmd,
+ int *monitoring_mode)
+{
+ *monitoring_mode = DEFAULT_DMEVENTD_MONITOR;
+
+ if (arg_count(cmd, monitor_ARG) &&
+ arg_count(cmd, ignoremonitoring_ARG)) {
+ log_error("Conflicting monitor and ignoremonitoring options");
+ return 0;
+ }
+
+ if (arg_count(cmd, monitor_ARG))
+ *monitoring_mode = arg_int_value(cmd, monitor_ARG,
+ DEFAULT_DMEVENTD_MONITOR);
+ else if (is_static() || arg_count(cmd, ignoremonitoring_ARG) ||
+ !find_config_tree_bool(cmd, "activation/monitoring",
+ DEFAULT_DMEVENTD_MONITOR))
+ *monitoring_mode = DMEVENTD_MONITOR_IGNORE;
+
+ return 1;
+}
diff --git a/tools/toollib.h b/tools/toollib.h
index d284de41..987814ed 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -112,4 +112,7 @@ int pvcreate_params_validate(struct cmd_context *cmd,
int argc, char **argv,
struct pvcreate_params *pp);
+int get_activation_monitoring_mode(struct cmd_context *cmd,
+ int *monitoring_mode);
+
#endif
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 6d869f96..e013bdec 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -522,16 +522,17 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg,
void *handle __attribute((unused)))
{
- int r = ECMD_FAILED;
+ int dmeventd_mode, r = ECMD_FAILED;
if (vg_is_exported(vg)) {
log_error("Volume group \"%s\" is exported", vg_name);
return ECMD_FAILED;
}
- init_dmeventd_monitor(arg_int_value(cmd, monitor_ARG,
- (is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
- DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
+ if (!get_activation_monitoring_mode(cmd, &dmeventd_mode))
+ return ECMD_FAILED;
+
+ init_dmeventd_monitor(dmeventd_mode);
/*
* FIXME: DEFAULT_BACKGROUND_POLLING should be "unspecified".