diff options
author | Heinz Mauelshagen <heinzm@redhat.com> | 2017-03-17 20:39:12 -0400 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2017-03-27 11:45:26 -0400 |
commit | 4464e36e06470e3d68dc26a874f0dbdffa09a6e8 (patch) | |
tree | 87f6c3f8d3167467ea2e9cefdd977ee4381ae1d7 /drivers/md/dm-raid.c | |
parent | 78e470c26f524f4706c2555613b9641d85190cbe (diff) |
dm raid: fix table line argument order in status
Commit 3a1c1ef2f ("dm raid: enhance status interface and fixup
takeover/raid0") added new table line arguments and introduced an
ordering flaw. The sequence of the raid10_copies and raid10_format
raid parameters got reversed which causes lvm2 userspace to fail by
falsely assuming a changed table line.
Sequence those 2 parameters as before so that old lvm2 can function
properly with new kernels by adjusting the table line output as
documented in Documentation/device-mapper/dm-raid.txt.
Also, add missing version 1.10.1 highlight to the documention.
Fixes: 3a1c1ef2f ("dm raid: enhance status interface and fixup takeover/raid0")
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r-- | drivers/md/dm-raid.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index f8564d63982f..e07185fca638 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -3382,38 +3382,28 @@ static void raid_status(struct dm_target *ti, status_type_t type, | |||
3382 | hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_NO_ARGS) + | 3382 | hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_NO_ARGS) + |
3383 | hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_ONE_ARG) * 2 + | 3383 | hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_ONE_ARG) * 2 + |
3384 | (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags) ? 2 : 0); | 3384 | (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags) ? 2 : 0); |
3385 | |||
3385 | /* Emit table line */ | 3386 | /* Emit table line */ |
3387 | /* This has to be in the documented order for userspace! */ | ||
3386 | DMEMIT("%s %u %u", rs->raid_type->name, raid_param_cnt, mddev->new_chunk_sectors); | 3388 | DMEMIT("%s %u %u", rs->raid_type->name, raid_param_cnt, mddev->new_chunk_sectors); |
3387 | if (test_bit(__CTR_FLAG_RAID10_FORMAT, &rs->ctr_flags)) | ||
3388 | DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT), | ||
3389 | raid10_md_layout_to_format(mddev->layout)); | ||
3390 | if (test_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) | ||
3391 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES), | ||
3392 | raid10_md_layout_to_copies(mddev->layout)); | ||
3393 | if (test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)) | ||
3394 | DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC)); | ||
3395 | if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags)) | 3389 | if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags)) |
3396 | DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_SYNC)); | 3390 | DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_SYNC)); |
3397 | if (test_bit(__CTR_FLAG_REGION_SIZE, &rs->ctr_flags)) | 3391 | if (test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)) |
3398 | DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE), | 3392 | DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC)); |
3399 | (unsigned long long) to_sector(mddev->bitmap_info.chunksize)); | ||
3400 | if (test_bit(__CTR_FLAG_DATA_OFFSET, &rs->ctr_flags)) | ||
3401 | DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET), | ||
3402 | (unsigned long long) rs->data_offset); | ||
3403 | if (test_bit(__CTR_FLAG_DAEMON_SLEEP, &rs->ctr_flags)) | ||
3404 | DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP), | ||
3405 | mddev->bitmap_info.daemon_sleep); | ||
3406 | if (test_bit(__CTR_FLAG_DELTA_DISKS, &rs->ctr_flags)) | ||
3407 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS), | ||
3408 | max(rs->delta_disks, mddev->delta_disks)); | ||
3409 | if (test_bit(__CTR_FLAG_STRIPE_CACHE, &rs->ctr_flags)) | ||
3410 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE), | ||
3411 | max_nr_stripes); | ||
3412 | if (rebuild_disks) | 3393 | if (rebuild_disks) |
3413 | for (i = 0; i < rs->raid_disks; i++) | 3394 | for (i = 0; i < rs->raid_disks; i++) |
3414 | if (test_bit(rs->dev[i].rdev.raid_disk, (void *) rs->rebuild_disks)) | 3395 | if (test_bit(rs->dev[i].rdev.raid_disk, (void *) rs->rebuild_disks)) |
3415 | DMEMIT(" %s %u", dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD), | 3396 | DMEMIT(" %s %u", dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD), |
3416 | rs->dev[i].rdev.raid_disk); | 3397 | rs->dev[i].rdev.raid_disk); |
3398 | if (test_bit(__CTR_FLAG_DAEMON_SLEEP, &rs->ctr_flags)) | ||
3399 | DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP), | ||
3400 | mddev->bitmap_info.daemon_sleep); | ||
3401 | if (test_bit(__CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags)) | ||
3402 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE), | ||
3403 | mddev->sync_speed_min); | ||
3404 | if (test_bit(__CTR_FLAG_MAX_RECOVERY_RATE, &rs->ctr_flags)) | ||
3405 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE), | ||
3406 | mddev->sync_speed_max); | ||
3417 | if (write_mostly_params) | 3407 | if (write_mostly_params) |
3418 | for (i = 0; i < rs->raid_disks; i++) | 3408 | for (i = 0; i < rs->raid_disks; i++) |
3419 | if (test_bit(WriteMostly, &rs->dev[i].rdev.flags)) | 3409 | if (test_bit(WriteMostly, &rs->dev[i].rdev.flags)) |
@@ -3422,12 +3412,24 @@ static void raid_status(struct dm_target *ti, status_type_t type, | |||
3422 | if (test_bit(__CTR_FLAG_MAX_WRITE_BEHIND, &rs->ctr_flags)) | 3412 | if (test_bit(__CTR_FLAG_MAX_WRITE_BEHIND, &rs->ctr_flags)) |
3423 | DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND), | 3413 | DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND), |
3424 | mddev->bitmap_info.max_write_behind); | 3414 | mddev->bitmap_info.max_write_behind); |
3425 | if (test_bit(__CTR_FLAG_MAX_RECOVERY_RATE, &rs->ctr_flags)) | 3415 | if (test_bit(__CTR_FLAG_STRIPE_CACHE, &rs->ctr_flags)) |
3426 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE), | 3416 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE), |
3427 | mddev->sync_speed_max); | 3417 | max_nr_stripes); |
3428 | if (test_bit(__CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags)) | 3418 | if (test_bit(__CTR_FLAG_REGION_SIZE, &rs->ctr_flags)) |
3429 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE), | 3419 | DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE), |
3430 | mddev->sync_speed_min); | 3420 | (unsigned long long) to_sector(mddev->bitmap_info.chunksize)); |
3421 | if (test_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) | ||
3422 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES), | ||
3423 | raid10_md_layout_to_copies(mddev->layout)); | ||
3424 | if (test_bit(__CTR_FLAG_RAID10_FORMAT, &rs->ctr_flags)) | ||
3425 | DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT), | ||
3426 | raid10_md_layout_to_format(mddev->layout)); | ||
3427 | if (test_bit(__CTR_FLAG_DELTA_DISKS, &rs->ctr_flags)) | ||
3428 | DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS), | ||
3429 | max(rs->delta_disks, mddev->delta_disks)); | ||
3430 | if (test_bit(__CTR_FLAG_DATA_OFFSET, &rs->ctr_flags)) | ||
3431 | DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET), | ||
3432 | (unsigned long long) rs->data_offset); | ||
3431 | if (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) | 3433 | if (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) |
3432 | DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_DEV), | 3434 | DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_DEV), |
3433 | __get_dev_name(rs->journal_dev.dev)); | 3435 | __get_dev_name(rs->journal_dev.dev)); |
@@ -3791,7 +3793,7 @@ static void raid_resume(struct dm_target *ti) | |||
3791 | 3793 | ||
3792 | static struct target_type raid_target = { | 3794 | static struct target_type raid_target = { |
3793 | .name = "raid", | 3795 | .name = "raid", |
3794 | .version = {1, 10, 1}, | 3796 | .version = {1, 11, 0}, |
3795 | .module = THIS_MODULE, | 3797 | .module = THIS_MODULE, |
3796 | .ctr = raid_ctr, | 3798 | .ctr = raid_ctr, |
3797 | .dtr = raid_dtr, | 3799 | .dtr = raid_dtr, |