]> sourceware.org Git - lvm2.git/commitdiff
dmeventd: improve more raid status reporting
authorZdenek Kabelac <zkabelac@redhat.com>
Fri, 23 Jun 2017 22:06:12 +0000 (00:06 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Fri, 23 Jun 2017 22:06:12 +0000 (00:06 +0200)
When we want to report primary leg failure, check for intial 'a',
since otherwice 'Aa idle' is normally visible.

Also reset array of bit flags marking dead devices, once
plugin detects raid is in sync.

WHATS_NEW_DM
daemons/dmeventd/plugins/raid/dmeventd_raid.c

index 3e0e8a5d7b0fab2a1823a4a346b423f7405af6ff..83df7cc0a48c420643095508ada0fdb6dbe48068 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.141 - 
 ===============================
+  Reset array with dead rimage devices once raid gets in sync.
   Drop unneeded --config option from raid dmeventd plugin.
   dm_get_status_raid() handle better some incosistent md statuses.
   Accept truncated files in calls to dm_stats_update_regions_from_fd().
index 666362aa836a96b79e73a334fbb62551f7b24478..52cf43d6b5cf830113c3f286ebe8b9edb8e682c5 100644 (file)
@@ -68,7 +68,8 @@ static int _process_raid_event(struct dso_state *state, char *params, const char
         * This is simply the way the kernel works...
         */
        if (!strcmp(status->sync_action, "idle") &&
-           strchr(status->dev_health, 'a')) {
+           (status->dev_health[0] == 'a') &&
+           (status->insync_regions < status->total_regions)) {
                log_error("Primary sources for new RAID, %s, have failed.",
                          device);
                dead = 1; /* run it through LVM repair */
@@ -97,6 +98,8 @@ static int _process_raid_event(struct dso_state *state, char *params, const char
                }
        } else {
                state->failed = 0;
+               if (status->insync_regions == status->total_regions)
+                       memset(&state->raid_devs, 0, sizeof(state->raid_devs));
                log_info("%s array, %s, is %s in-sync.",
                         status->raid_type, device,
                         (status->insync_regions == status->total_regions) ? "now" : "not");
This page took 0.06381 seconds and 5 git commands to generate.