summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2016-01-29 11:30:57 -0600
committerDavid Teigland <teigland@redhat.com>2016-01-29 14:58:40 -0600
commit8fe6490ac3d2813cafe4ace81135f60570d8922f (patch)
tree31509713a499365fb7aaefbf131ba7c86655b1bb
parentf14f72d676edae766934a84673329030e9f9aba3 (diff)
downloadlvm2-8fe6490ac3d2813cafe4ace81135f60570d8922f.tar.gz
pvscan: disable lvmetad if lvm1 metadata is found
-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 1bcee2cbd..5a566950e 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -1354,6 +1354,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;
}
@@ -1468,6 +1470,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;
@@ -1945,6 +1950,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 4ec66dd3f..6345d9551 100644
--- a/lib/cache/lvmetad.h
+++ b/lib/cache/lvmetad.h
@@ -179,6 +179,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 */
@@ -212,6 +213,7 @@ int lvmetad_is_disabled(struct cmd_context *cmd, const char **reason);
# define lvmetad_token_matches(cmd) (1)
# define lvmetad_is_connected() (0)
# define lvmetad_is_disabled(cmd, reason) (0)
+# define lvmetad_set_disabled(cmd, reason) do { } while (0)
# endif /* LVMETAD_SUPPORT */