diff options
author | Adam Kwolek <adam.kwolek@intel.com> | 2010-12-02 09:18:49 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-12-03 14:15:17 +1100 |
commit | 5158aef1261409bd2d7aba5b68f4d35e6de252a2 (patch) | |
tree | a56fec541415cd536ec12a71655065d471202db9 /msg.c | |
parent | e9a2ac028eb66fdc50c079fc9bf03aa4325bcd5f (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.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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); |