diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-02 17:36:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-02 17:36:00 -0500 |
commit | ca4c7d7c2b6b4bfb293c24da1442cf0336c1912a (patch) | |
tree | d134fccf646d6dfc328dd9cd71d9ff1bb2f28d24 | |
parent | 54d7989f476ca57fc3c5cc71524c480ccb74c481 (diff) | |
parent | 2664f3c94abc7181171b7c05b2aaa76ea7d9d613 (diff) |
Merge tag 'dm-4.11-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fixes from Mike Snitzer:
- a dm-raid stable@ fix for possible corruption when triggering a raid
reshape via lvm2; and an additional small patch ontop to bump version
of the dm-raid target outside of the stable@ fix
- a dm-raid fix for a 'dm-4.11-changes' regression introduced by a
commit that was meant to only cleanup confusing branching.
* tag 'dm-4.11-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm raid: bump the target version
dm raid: fix data corruption on reshape request
dm raid: fix raid "check" regression due to improper cleanup in raid_message()
-rw-r--r-- | drivers/md/dm-raid.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 5c9e95d66f3b..f8564d63982f 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -101,6 +101,8 @@ struct raid_dev { | |||
101 | #define CTR_FLAG_RAID10_USE_NEAR_SETS (1 << __CTR_FLAG_RAID10_USE_NEAR_SETS) | 101 | #define CTR_FLAG_RAID10_USE_NEAR_SETS (1 << __CTR_FLAG_RAID10_USE_NEAR_SETS) |
102 | #define CTR_FLAG_JOURNAL_DEV (1 << __CTR_FLAG_JOURNAL_DEV) | 102 | #define CTR_FLAG_JOURNAL_DEV (1 << __CTR_FLAG_JOURNAL_DEV) |
103 | 103 | ||
104 | #define RESUME_STAY_FROZEN_FLAGS (CTR_FLAG_DELTA_DISKS | CTR_FLAG_DATA_OFFSET) | ||
105 | |||
104 | /* | 106 | /* |
105 | * Definitions of various constructor flags to | 107 | * Definitions of various constructor flags to |
106 | * be used in checks of valid / invalid flags | 108 | * be used in checks of valid / invalid flags |
@@ -3462,9 +3464,11 @@ static int raid_message(struct dm_target *ti, unsigned int argc, char **argv) | |||
3462 | else if (!strcasecmp(argv[0], "recover")) | 3464 | else if (!strcasecmp(argv[0], "recover")) |
3463 | set_bit(MD_RECOVERY_RECOVER, &mddev->recovery); | 3465 | set_bit(MD_RECOVERY_RECOVER, &mddev->recovery); |
3464 | else { | 3466 | else { |
3465 | if (!strcasecmp(argv[0], "check")) | 3467 | if (!strcasecmp(argv[0], "check")) { |
3466 | set_bit(MD_RECOVERY_CHECK, &mddev->recovery); | 3468 | set_bit(MD_RECOVERY_CHECK, &mddev->recovery); |
3467 | else if (!strcasecmp(argv[0], "repair")) { | 3469 | set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); |
3470 | set_bit(MD_RECOVERY_SYNC, &mddev->recovery); | ||
3471 | } else if (!strcasecmp(argv[0], "repair")) { | ||
3468 | set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); | 3472 | set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); |
3469 | set_bit(MD_RECOVERY_SYNC, &mddev->recovery); | 3473 | set_bit(MD_RECOVERY_SYNC, &mddev->recovery); |
3470 | } else | 3474 | } else |
@@ -3771,7 +3775,15 @@ static void raid_resume(struct dm_target *ti) | |||
3771 | mddev->ro = 0; | 3775 | mddev->ro = 0; |
3772 | mddev->in_sync = 0; | 3776 | mddev->in_sync = 0; |
3773 | 3777 | ||
3774 | 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); | ||
3775 | 3787 | ||
3776 | if (mddev->suspended) | 3788 | if (mddev->suspended) |
3777 | mddev_resume(mddev); | 3789 | mddev_resume(mddev); |
@@ -3779,7 +3791,7 @@ static void raid_resume(struct dm_target *ti) | |||
3779 | 3791 | ||
3780 | static struct target_type raid_target = { | 3792 | static struct target_type raid_target = { |
3781 | .name = "raid", | 3793 | .name = "raid", |
3782 | .version = {1, 10, 0}, | 3794 | .version = {1, 10, 1}, |
3783 | .module = THIS_MODULE, | 3795 | .module = THIS_MODULE, |
3784 | .ctr = raid_ctr, | 3796 | .ctr = raid_ctr, |
3785 | .dtr = raid_dtr, | 3797 | .dtr = raid_dtr, |