diff options
| -rw-r--r-- | drivers/md/dm-raid.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 0460cf84fd0e..350527f60834 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
| @@ -3756,6 +3756,8 @@ static int raid_preresume(struct dm_target *ti) | |||
| 3756 | return r; | 3756 | return r; |
| 3757 | } | 3757 | } |
| 3758 | 3758 | ||
| 3759 | #define RESUME_STAY_FROZEN_FLAGS (CTR_FLAG_DELTA_DISKS | CTR_FLAG_DATA_OFFSET) | ||
| 3760 | |||
| 3759 | static void raid_resume(struct dm_target *ti) | 3761 | static void raid_resume(struct dm_target *ti) |
| 3760 | { | 3762 | { |
| 3761 | struct raid_set *rs = ti->private; | 3763 | struct raid_set *rs = ti->private; |
| @@ -3773,7 +3775,15 @@ static void raid_resume(struct dm_target *ti) | |||
| 3773 | mddev->ro = 0; | 3775 | mddev->ro = 0; |
| 3774 | mddev->in_sync = 0; | 3776 | mddev->in_sync = 0; |
| 3775 | 3777 | ||
| 3776 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | 3778 | /* |
| 3779 | * Keep the RAID set frozen if reshape/rebuild flags are set. | ||
| 3780 | * The RAID set is unfrozen once the next table load/resume, | ||
| 3781 | * which clears the reshape/rebuild flags, occurs. | ||
| 3782 | * This ensures that the constructor for the inactive table | ||
| 3783 | * retrieves an up-to-date reshape_position. | ||
| 3784 | */ | ||
| 3785 | if (!(rs->ctr_flags & RESUME_STAY_FROZEN_FLAGS)) | ||
| 3786 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | ||
| 3777 | 3787 | ||
| 3778 | if (mddev->suspended) | 3788 | if (mddev->suspended) |
| 3779 | mddev_resume(mddev); | 3789 | mddev_resume(mddev); |
