diff options
author | David Teigland <teigland@redhat.com> | 2016-01-29 11:30:57 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2016-01-29 14:58:40 -0600 |
commit | 8fe6490ac3d2813cafe4ace81135f60570d8922f (patch) | |
tree | 31509713a499365fb7aaefbf131ba7c86655b1bb | |
parent | f14f72d676edae766934a84673329030e9f9aba3 (diff) | |
download | lvm2-8fe6490ac3d2813cafe4ace81135f60570d8922f.tar.gz |
pvscan: disable lvmetad if lvm1 metadata is found
-rw-r--r-- | lib/cache/lvmetad.c | 28 | ||||
-rw-r--r-- | lib/cache/lvmetad.h | 2 |
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 */ |