summaryrefslogtreecommitdiffstats
path: root/tools/pvscan.c
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2012-06-27 08:59:34 -0400
committerPeter Rajnoha <prajnoha@redhat.com>2012-06-28 09:42:47 -0400
commit95ced7a7be26499fed2ffa03d71002e73c2d3ca9 (patch)
tree464f48c0ffaacad9afa14072307ccb506fc34826 /tools/pvscan.c
parent2729720fd329f2c33cddeeded591a06fe4b6a147 (diff)
downloadlvm2-95ced7a7be26499fed2ffa03d71002e73c2d3ca9.tar.gz
lvm2-95ced7a7be26499fed2ffa03d71002e73c2d3ca9.tar.xz
lvm2-95ced7a7be26499fed2ffa03d71002e73c2d3ca9.zip
activate: add autoactivation hooks
Define an 'activation_handler' that gets called automatically on PV appearance/disappearance while processing the lvmetad_pv_found and lvmetad_pv_gone functions that are supposed to update the lvmetad state based on PV availability state. For now, the actual support is for PV appearance only, leaving room for PV disappearance support as well (which is a more complex problem to solve as this needs to count with possible device stack). Add a new activation change mode - CHANGE_AAY exposed as '--activate ay/-aay' argument ('activate automatically'). Factor out the vgchange activation functionality for use in other tools (like pvscan...).
Diffstat (limited to 'tools/pvscan.c')
-rw-r--r--tools/pvscan.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/tools/pvscan.c b/tools/pvscan.c
index 62034c9b..beba1743 100644
--- a/tools/pvscan.c
+++ b/tools/pvscan.c
@@ -97,7 +97,7 @@ static void _pvscan_display_single(struct cmd_context *cmd,
pv_pe_size(pv)));
}
-static int _pvscan_lvmetad_all_devs(struct cmd_context *cmd)
+static int _pvscan_lvmetad_all_devs(struct cmd_context *cmd, activation_handler handler)
{
struct dev_iter *iter;
struct device *dev;
@@ -109,7 +109,7 @@ static int _pvscan_lvmetad_all_devs(struct cmd_context *cmd)
}
while ((dev = dev_iter_get(iter))) {
- if (!pvscan_lvmetad_single(cmd, dev)) {
+ if (!pvscan_lvmetad_single(cmd, dev, handler)) {
r = 0;
break;
}
@@ -134,6 +134,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
struct arg_value_group_list *current_group;
dev_t devno;
char *buf;
+ activation_handler handler = NULL;
if (arg_count(cmd, major_ARG) + arg_count(cmd, minor_ARG))
devno_args = 1;
@@ -150,7 +151,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
/* Scan everything? */
if (!argc && !devno_args) {
- if (!_pvscan_lvmetad_all_devs(cmd))
+ if (!_pvscan_lvmetad_all_devs(cmd, handler))
ret = ECMD_FAILED;
goto out;
}
@@ -167,7 +168,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
continue;
}
- if (!pvscan_lvmetad_single(cmd, dev)) {
+ if (!pvscan_lvmetad_single(cmd, dev, handler)) {
ret = ECMD_FAILED;
break;
}
@@ -192,7 +193,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
if (!dm_asprintf(&buf, "%" PRIi32 ":%" PRIi32, major, minor))
stack;
/* FIXME Filters? */
- if (!lvmetad_pv_gone(devno, buf ? : "")) {
+ if (!lvmetad_pv_gone(devno, buf ? : "", handler)) {
ret = ECMD_FAILED;
if (buf)
dm_free(buf);
@@ -206,7 +207,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
continue;
}
- if (!pvscan_lvmetad_single(cmd, dev)) {
+ if (!pvscan_lvmetad_single(cmd, dev, handler)) {
ret = ECMD_FAILED;
break;
}