Skip to content
Snippets Groups Projects
Commit f3378b48 authored by NeilBrown's avatar NeilBrown
Browse files

md: expedite metadata update when switching read-auto -> active


If something has failed while the array was read-auto,
then when we switch to 'active' we need to update the metadata.
This will happen anyway but it is good to expedite it, and
also to ensure any failed device has been released by the
underlying device before we try to action the ioctl which
caused us to switch to 'active' mode.

Reported-by: default avatarJoe Lawrence <Joe.Lawrence@stratus.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 51acbcec
No related merge requests found
...@@ -6532,7 +6532,17 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, ...@@ -6532,7 +6532,17 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
mddev->ro = 0; mddev->ro = 0;
sysfs_notify_dirent_safe(mddev->sysfs_state); sysfs_notify_dirent_safe(mddev->sysfs_state);
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
md_wakeup_thread(mddev->thread); /* mddev_unlock will wake thread */
/* If a device failed while we were read-only, we
* need to make sure the metadata is updated now.
*/
if (test_bit(MD_CHANGE_DEVS, &mddev->flags)) {
mddev_unlock(mddev);
wait_event(mddev->sb_wait,
!test_bit(MD_CHANGE_DEVS, &mddev->flags) &&
!test_bit(MD_CHANGE_PENDING, &mddev->flags));
mddev_lock(mddev);
}
} else { } else {
err = -EROFS; err = -EROFS;
goto abort_unlock; goto abort_unlock;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment