summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2016-01-29 11:30:57 -0600
committerDavid Teigland <teigland@redhat.com>2016-04-18 16:56:05 -0500
commit4fb97f3178f7be60991517427ea24da4a04ab3df (patch)
treed3a13c2ed4eb3b8834b8d82d6be23c3ef0a2b723
parent36811e6349bbb7a5f1b6d0f52ea581a4e7d9634e (diff)
downloadlvm2-4fb97f3178f7be60991517427ea24da4a04ab3df.tar.gz
lvmetad: set disabled flag in lvmetad if lvm1 metadata is found
When devices are being scanned, if lvm1 metadata is seen, tell lvmetad to set its disabled flag because of lvm1 metadata.
-rw-r--r--lib/cache/lvmetad.c28
-rw-r--r--lib/cache/lvmetad.h2
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index f2831f161..642a407a1 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -1595,6 +1595,8 @@ static struct volume_group *lvmetad_pvscan_vg(struct cmd_context *cmd, struct vo
log_error("WARNING: Ignoring obsolete format of metadata (%s) on device %s when using lvmetad",
baton.fid->fmt->name, dev_name(pvl->pv->dev));
lvmcache_fmt(info)->ops->destroy_instance(baton.fid);
+ log_warn("WARNING: Disabling lvmetad cache which does not support obsolete metadata.");
+ lvmetad_set_disabled(cmd, "LVM1");
return NULL;
}
@@ -1716,6 +1718,9 @@ int lvmetad_pvscan_single(struct cmd_context *cmd, struct device *dev,
baton.fid->fmt->name, dev_name(dev));
lvmcache_fmt(info)->ops->destroy_instance(baton.fid);
+ log_warn("WARNING: Disabling lvmetad cache which does not support obsolete metadata.");
+ lvmetad_set_disabled(cmd, "LVM1");
+
if (ignore_obsolete)
return 1;
return 0;
@@ -2250,6 +2255,29 @@ int lvmetad_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const cha
return ret;
}
+void lvmetad_set_disabled(struct cmd_context *cmd, const char *reason)
+{
+ daemon_reply reply;
+
+ if (!_lvmetad_use)
+ return;
+
+ log_debug_lvmetad("lvmetad send disabled %s", reason);
+
+ reply = daemon_send_simple(_lvmetad, "set_global_info",
+ "token = %s", "skip",
+ "global_disable = " FMTd64, (int64_t)1,
+ "disable_reason = %s", reason,
+ NULL);
+ if (reply.error)
+ log_error("Failed to send message to lvmetad %d", reply.error);
+
+ if (strcmp(daemon_reply_str(reply, "response", ""), "OK"))
+ log_error("Failed response from lvmetad.");
+
+ daemon_reply_destroy(reply);
+}
+
int lvmetad_is_disabled(struct cmd_context *cmd, const char **reason)
{
daemon_reply reply;
diff --git a/lib/cache/lvmetad.h b/lib/cache/lvmetad.h
index 10283bb8b..76e8fd266 100644
--- a/lib/cache/lvmetad.h
+++ b/lib/cache/lvmetad.h
@@ -173,6 +173,7 @@ int lvmetad_token_matches(struct cmd_context *cmd);
int lvmetad_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const char *vgid);
int lvmetad_is_disabled(struct cmd_context *cmd, const char **reason);
+void lvmetad_set_disabled(struct cmd_context *cmd, const char *reason);
# else /* LVMETAD_SUPPORT */
@@ -205,6 +206,7 @@ int lvmetad_is_disabled(struct cmd_context *cmd, const char **reason);
# define lvmetad_vg_is_foreign(cmd, vgname, vgid) (0)
# define lvmetad_token_matches(cmd) (1)
# define lvmetad_is_disabled(cmd, reason) (0)
+# define lvmetad_set_disabled(cmd, reason) do { } while (0)
# endif /* LVMETAD_SUPPORT */