From: Heinz Mauelshagen Date: Thu, 9 Mar 2017 19:41:07 +0000 (+0100) Subject: dmeventd: (workaround) fix mirror DSO to work with lvmetad X-Git-Tag: v2_02_169~188 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=76f6951c3e8f;p=lvm2.git dmeventd: (workaround) fix mirror DSO to work with lvmetad Automatic dmeventd repair of mirrors with active lvmetad configured (mirror_image_fault_policy = "allocate") fails because the lvscan run before the repair in the mirror DSO does not update the lvmetad cache properly thus "lvconvert --repair ..." fails. Need to scan the mirror LV before and after the repair to have proper cache content after the repair finished. The cache can't be relied on or the repair will fail. Resolves: rhbz1380521 --- diff --git a/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c b/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c index 4ec348f5a..181b8398b 100644 --- a/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c +++ b/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c @@ -111,6 +111,9 @@ static int _remove_failed_devices(const char *cmd_lvscan, const char *cmd_lvconv return 0; } + if (!dmeventd_lvm2_run_with_lock(cmd_lvscan)) + log_warn("WARNING: Re-scan of mirrored device %s failed.", device); + log_info("Repair of mirrored device %s finished successfully.", device); return 1; @@ -188,7 +191,7 @@ int register_device(const char *device, goto_bad; if (!dmeventd_lvm2_command(state->mem, state->cmd_lvconvert, sizeof(state->cmd_lvconvert), - "lvconvert --repair --use-policies", device)) + "lvconvert --config global{use_lvmetad = 0}' --repair --use-policies", device)) goto_bad; *user = state;