aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-03-02 17:36:00 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-03-02 17:36:00 -0500
commitca4c7d7c2b6b4bfb293c24da1442cf0336c1912a (patch)
treed134fccf646d6dfc328dd9cd71d9ff1bb2f28d24
parent54d7989f476ca57fc3c5cc71524c480ccb74c481 (diff)
parent2664f3c94abc7181171b7c05b2aaa76ea7d9d613 (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.c20
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
3780static struct target_type raid_target = { 3792static 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,