dm raid: fix false -EBUSY when handling check/repair message
Sending a check/repair message infrequently leads to -EBUSY instead of properly identifying an active resync. This occurs because raid_message() is testing recovery bits in a racy way. Fix by calling decipher_sync_action() from raid_message() to properly identify the idle state of the RAID device. Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
34743bfdde
commit
74694bcbdf
|
@ -3690,8 +3690,7 @@ static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
|
||||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||||
md_reap_sync_thread(mddev);
|
md_reap_sync_thread(mddev);
|
||||||
}
|
}
|
||||||
} else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
|
} else if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
|
||||||
test_bit(MD_RECOVERY_NEEDED, &mddev->recovery))
|
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
else if (!strcasecmp(argv[0], "resync"))
|
else if (!strcasecmp(argv[0], "resync"))
|
||||||
; /* MD_RECOVERY_NEEDED set below */
|
; /* MD_RECOVERY_NEEDED set below */
|
||||||
|
|
Loading…
Reference in New Issue