Pull MD fixes from Shaohua Li: "Two small fixes for MD: - an error handling fix from me - a recover bug fix for raid10 from BingJing" * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md: md/raid10: fix that replacement cannot complete recovery after reassemble MD: cleanup resources in failure
Unified · Split
| @@ -5547,7 +5547,8 @@ int md_run(struct mddev *mddev) · 5546 unmodified lines | |||
| 5547 | else | 5547 | else |
| 5548 | pr_warn("md: personality for level %s is not loaded!\n", | 5548 | pr_warn("md: personality for level %s is not loaded!\n", |
| 5549 | mddev->clevel); | 5549 | mddev->clevel); |
| 5550 | return -EINVAL; | 5550 | err = -EINVAL; |
| 5551 | goto abort; | ||
| 5551 | } | 5552 | } |
| 5552 | spin_unlock(&pers_lock); | 5553 | spin_unlock(&pers_lock); |
| 5553 | if (mddev->level != pers->level) { | 5554 | if (mddev->level != pers->level) { |
| @@ -5560,7 +5561,8 @@ int md_run(struct mddev *mddev) · 6 unmodified lines | |||
| 5560 | pers->start_reshape == NULL) { | 5561 | pers->start_reshape == NULL) { |
| 5561 | /* This personality cannot handle reshaping... */ | 5562 | /* This personality cannot handle reshaping... */ |
| 5562 | module_put(pers->owner); | 5563 | module_put(pers->owner); |
| 5563 | return -EINVAL; | 5564 | err = -EINVAL; |
| 5565 | goto abort; | ||
| 5564 | } | 5566 | } |
| 5565 | 5567 | ||
| 5566 | if (pers->sync_request) { | 5568 | if (pers->sync_request) { |
| @@ -5629,7 +5631,7 @@ int md_run(struct mddev *mddev) · 62 unmodified lines | |||
| 5629 | mddev->private = NULL; | 5631 | mddev->private = NULL; |
| 5630 | module_put(pers->owner); | 5632 | module_put(pers->owner); |
| 5631 | bitmap_destroy(mddev); | 5633 | bitmap_destroy(mddev); |
| 5632 | return err; | 5634 | goto abort; |
| 5633 | } | 5635 | } |
| 5634 | if (mddev->queue) { | 5636 | if (mddev->queue) { |
| 5635 | bool nonrot = true; | 5637 | bool nonrot = true; |
| @@ -3893,6 +3893,13 @@ static int raid10_run(struct mddev *mddev) · 3892 unmodified lines | |||
| 3893 | disk->rdev->saved_raid_disk < 0) | 3893 | disk->rdev->saved_raid_disk < 0) |
| 3894 | conf->fullsync = 1; | 3894 | conf->fullsync = 1; |
| 3895 | } | 3895 | } |
| 3896 | |||
| 3897 | if (disk->replacement && | ||
| 3898 | !test_bit(In_sync, &disk->replacement->flags) && | ||
| 3899 | disk->replacement->saved_raid_disk < 0) { | ||
| 3900 | conf->fullsync = 1; | ||
| 3901 | } | ||
| 3902 | |||
| 3896 | disk->recovery_disabled = mddev->recovery_disabled - 1; | 3903 | disk->recovery_disabled = mddev->recovery_disabled - 1; |
| 3897 | } | 3904 | } |
| 3898 | 3905 | ||