diff options
author | David Teigland <teigland@redhat.com> | 2016-01-29 11:30:57 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2016-02-25 15:35:28 -0600 |
commit | 72d99d90aa9f462024429ba92974e21d8118935a (patch) | |
tree | fadcddf5922e856639f1cd6305c7f5f342a5be26 | |
parent | 435aea7608c2ab6258604f52db591d52e12b9978 (diff) | |
download | lvm2-72d99d90aa9f462024429ba92974e21d8118935a.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 6eb359a8d..45b591193 100644 --- a/lib/cache/lvmetad.c +++ b/lib/cache/lvmetad.c @@ -1379,6 +1379,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; } @@ -1493,6 +1495,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; @@ -1968,6 +1973,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 */ |