summaryrefslogtreecommitdiff
path: root/msg.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2010-12-02 09:18:49 +0100
committerNeilBrown <neilb@suse.de>2010-12-03 14:15:17 +1100
commit5158aef1261409bd2d7aba5b68f4d35e6de252a2 (patch)
treea56fec541415cd536ec12a71655065d471202db9 /msg.c
parente9a2ac028eb66fdc50c079fc9bf03aa4325bcd5f (diff)
FIX: Cannot exit monitor after takeover
When performing backward takeover to raid0 monitor cannot exit for single raid0 array configuration. Monitor is locked by communication (ping_manager()) after unfreeze() Do not ping manager for raid0 array as they shouldn't be monitored. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'msg.c')
-rw-r--r--msg.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/msg.c b/msg.c
index 5ddf6e36..5511ecdb 100644
--- a/msg.c
+++ b/msg.c
@@ -381,6 +381,7 @@ void unblock_monitor(char *container, const int unfreeze)
{
struct mdstat_ent *ent, *e;
struct mdinfo *sra = NULL;
+ int to_ping = 0;
ent = mdstat_read(0, 0);
if (!ent) {
@@ -394,11 +395,14 @@ void unblock_monitor(char *container, const int unfreeze)
if (!is_container_member(e, container))
continue;
sysfs_free(sra);
- sra = sysfs_read(-1, e->devnum, GET_VERSION);
+ sra = sysfs_read(-1, e->devnum, GET_VERSION|GET_LEVEL);
+ if (sra->array.level > 0)
+ to_ping++;
if (unblock_subarray(sra, unfreeze))
fprintf(stderr, Name ": Failed to unfreeze %s\n", e->dev);
}
- ping_monitor(container);
+ if (to_ping)
+ ping_monitor(container);
sysfs_free(sra);
free_mdstat(ent);