dm raid: rename _argname_by_flag to dm_raid_arg_name_by_flag
[cascardo/linux.git] / drivers / md / dm-raid.c
index 06a4d17..7876f95 100644 (file)
@@ -63,7 +63,7 @@ struct raid_dev {
 #define CTR_FLAG_REGION_SIZE      0x200 /* 2 */ /* Not with raid0! */
 #define CTR_FLAG_RAID10_COPIES    0x400 /* 2 */ /* Only with raid10 */
 #define CTR_FLAG_RAID10_FORMAT    0x800 /* 2 */ /* Only with raid10 */
-/* New for v1.8.0 */
+/* New for v1.9.0 */
 #define CTR_FLAG_DELTA_DISKS         0x1000 /* 2 */ /* Only with reshapable raid4/5/6/10! */
 #define CTR_FLAG_DATA_OFFSET         0x2000 /* 2 */ /* Only with reshapable raid4/5/6/10! */
 #define CTR_FLAG_RAID10_USE_NEAR_SETS 0x4000 /* 2 */ /* Only with raid10! */
@@ -328,7 +328,7 @@ static struct arg_name_flag {
 };
 
 /* Return argument name string for given @flag */
-static const char *_argname_by_flag(const uint32_t flag)
+static const char *dm_raid_arg_name_by_flag(const uint32_t flag)
 {
        if (hweight32(flag) == 1) {
                struct arg_name_flag *anf = _arg_name_flags + ARRAY_SIZE(_arg_name_flags);
@@ -1060,7 +1060,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        return -EINVAL;
                }
 
-               if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_NOSYNC))) {
+               if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC))) {
                        if (_test_and_set_flag(CTR_FLAG_NOSYNC, &rs->ctr_flags)) {
                                rs->ti->error = "Only one 'nosync' argument allowed";
                                return -EINVAL;
@@ -1068,7 +1068,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        rs->md.recovery_cp = MaxSector;
                        continue;
                }
-               if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_SYNC))) {
+               if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_SYNC))) {
                        if (_test_and_set_flag(CTR_FLAG_SYNC, &rs->ctr_flags)) {
                                rs->ti->error = "Only one 'sync' argument allowed";
                                return -EINVAL;
@@ -1076,7 +1076,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        rs->md.recovery_cp = 0;
                        continue;
                }
-               if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_RAID10_USE_NEAR_SETS))) {
+               if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_USE_NEAR_SETS))) {
                        if (_test_and_set_flag(CTR_FLAG_RAID10_USE_NEAR_SETS, &rs->ctr_flags)) {
                                rs->ti->error = "Only one 'raid10_use_new_sets' argument allowed";
                                return -EINVAL;
@@ -1095,7 +1095,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                 * Parameters that take a string value are checked here.
                 */
 
-               if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_RAID10_FORMAT))) {
+               if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT))) {
                        if (_test_and_set_flag(CTR_FLAG_RAID10_FORMAT, &rs->ctr_flags)) {
                                rs->ti->error = "Only one 'raid10_format' argument pair allowed";
                                return -EINVAL;
@@ -1117,7 +1117,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        return -EINVAL;
                }
 
-               if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_REBUILD))) {
+               if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD))) {
                        /*
                         * "rebuild" is being passed in by userspace to provide
                         * indexes of replaced devices and to set up additional
@@ -1138,7 +1138,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        clear_bit(Faulty, &rd->rdev.flags);
                        rd->rdev.recovery_offset = 0;
                        _set_flag(CTR_FLAG_REBUILD, &rs->ctr_flags);
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_WRITE_MOSTLY))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_WRITE_MOSTLY))) {
                        if (!rt_is_raid1(rt)) {
                                rs->ti->error = "write_mostly option is only valid for RAID1";
                                return -EINVAL;
@@ -1151,7 +1151,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
 
                        set_bit(WriteMostly, &rs->dev[value].rdev.flags);
                        _set_flag(CTR_FLAG_WRITE_MOSTLY, &rs->ctr_flags);
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_MAX_WRITE_BEHIND))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND))) {
                        if (!rt_is_raid1(rt)) {
                                rs->ti->error = "max_write_behind option is only valid for RAID1";
                                return -EINVAL;
@@ -1173,7 +1173,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        }
 
                        rs->md.bitmap_info.max_write_behind = value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_DAEMON_SLEEP))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP))) {
                        if (_test_and_set_flag(CTR_FLAG_DAEMON_SLEEP, &rs->ctr_flags)) {
                                rs->ti->error = "Only one daemon_sleep argument pair allowed";
                                return -EINVAL;
@@ -1183,7 +1183,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                                return -EINVAL;
                        }
                        rs->md.bitmap_info.daemon_sleep = value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_DATA_OFFSET))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET))) {
                        /* Userspace passes new data_offset after having extended the the data image LV */
                        if (_test_and_set_flag(CTR_FLAG_DATA_OFFSET, &rs->ctr_flags)) {
                                rs->ti->error = "Only one data_offset argument pair allowed";
@@ -1195,7 +1195,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                                return -EINVAL;
                        }
                        rs->data_offset = value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_DELTA_DISKS))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS))) {
                        /* Define the +/-# of disks to add to/remove from the given raid set */
                        if (_test_and_set_flag(CTR_FLAG_DELTA_DISKS, &rs->ctr_flags)) {
                                rs->ti->error = "Only one delta_disks argument pair allowed";
@@ -1208,7 +1208,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        }
 
                        rs->delta_disks = value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_STRIPE_CACHE))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE))) {
                        if (_test_and_set_flag(CTR_FLAG_STRIPE_CACHE, &rs->ctr_flags)) {
                                rs->ti->error = "Only one stripe_cache argument pair allowed";
                                return -EINVAL;
@@ -1229,7 +1229,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                                return -EINVAL;
                        }
 
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_MIN_RECOVERY_RATE))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE))) {
                        if (_test_and_set_flag(CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags)) {
                                rs->ti->error = "Only one min_recovery_rate argument pair allowed";
                                return -EINVAL;
@@ -1239,7 +1239,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                                return -EINVAL;
                        }
                        rs->md.sync_speed_min = (int)value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_MAX_RECOVERY_RATE))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE))) {
                        if (_test_and_set_flag(CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags)) {
                                rs->ti->error = "Only one max_recovery_rate argument pair allowed";
                                return -EINVAL;
@@ -1249,14 +1249,14 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                                return -EINVAL;
                        }
                        rs->md.sync_speed_max = (int)value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_REGION_SIZE))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE))) {
                        if (_test_and_set_flag(CTR_FLAG_REGION_SIZE, &rs->ctr_flags)) {
                                rs->ti->error = "Only one region_size argument pair allowed";
                                return -EINVAL;
                        }
 
                        region_size = value;
-               } else if (!strcasecmp(key, _argname_by_flag(CTR_FLAG_RAID10_COPIES))) {
+               } else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES))) {
                        if (_test_and_set_flag(CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) {
                                rs->ti->error = "Only one raid10_copies argument pair allowed";
                                return -EINVAL;
@@ -1513,8 +1513,7 @@ static bool rs_takeover_requested(struct raid_set *rs)
 }
 
 /*  Features */
-#define        FEATURE_FLAG_SUPPORTS_V180      0x1 /* Supports v1.8.0 extended superblock */
-#define        FEATURE_FLAG_SUPPORTS_RESHAPE   0x2 /* Supports v1.8.0 reshaping functionality */
+#define        FEATURE_FLAG_SUPPORTS_V190      0x1 /* Supports extended superblock */
 
 /* State flags for sb->flags */
 #define        SB_FLAG_RESHAPE_ACTIVE          0x1
@@ -1527,13 +1526,13 @@ static bool rs_takeover_requested(struct raid_set *rs)
 #define DM_RAID_MAGIC 0x64526D44
 struct dm_raid_superblock {
        __le32 magic;           /* "DmRd" */
-       __le32 compat_features; /* Used to indicate compatible features (like 1.8.0 ondisk metadata extension) */
+       __le32 compat_features; /* Used to indicate compatible features (like 1.9.0 ondisk metadata extension) */
 
        __le32 num_devices;     /* Number of devices in this raid set. (Max 64) */
        __le32 array_position;  /* The position of this drive in the raid set */
 
        __le64 events;          /* Incremented by md when superblock updated */
-       __le64 failed_devices;  /* Pre 1.8.0 part of bit field of devices to */
+       __le64 failed_devices;  /* Pre 1.9.0 part of bit field of devices to */
                                /* indicate failures (see extension below) */
 
        /*
@@ -1556,9 +1555,9 @@ struct dm_raid_superblock {
        __le32 stripe_sectors;
 
        /********************************************************************
-        * BELOW FOLLOW V1.8.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
+        * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
         *
-        * FEATURE_FLAG_SUPPORTS_V180 in the features member indicates that those exist
+        * FEATURE_FLAG_SUPPORTS_V190 in the features member indicates that those exist
         */
 
        __le32 flags; /* Flags defining array states for reshaping */
@@ -1592,7 +1591,7 @@ struct dm_raid_superblock {
 
        /*
         * Additonal Bit field of devices indicating failures to support
-        * up to 256 devices with the 1.8.0 on-disk metadata format
+        * up to 256 devices with the 1.9.0 on-disk metadata format
         */
        __le64 extended_failed_devices[DISKS_ARRAY_ELEMS - 1];
 
@@ -1625,7 +1624,7 @@ static void sb_retrieve_failed_devices(struct dm_raid_superblock *sb, uint64_t *
        failed_devices[0] = le64_to_cpu(sb->failed_devices);
        memset(failed_devices + 1, 0, sizeof(sb->extended_failed_devices));
 
-       if (_test_flag(FEATURE_FLAG_SUPPORTS_V180, le32_to_cpu(sb->compat_features))) {
+       if (_test_flag(FEATURE_FLAG_SUPPORTS_V190, le32_to_cpu(sb->compat_features))) {
                int i = ARRAY_SIZE(sb->extended_failed_devices);
 
                while (i--)
@@ -1675,7 +1674,7 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
                sb_update_failed_devices(sb, failed_devices);
 
        sb->magic = cpu_to_le32(DM_RAID_MAGIC);
-       sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V180); /* Don't set reshape flag yet */
+       sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V190);
 
        sb->num_devices = cpu_to_le32(mddev->raid_disks);
        sb->array_position = cpu_to_le32(rdev->raid_disk);
@@ -1754,7 +1753,7 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev)
                super_sync(rdev->mddev, rdev);
 
                set_bit(FirstUse, &rdev->flags);
-               sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V180); /* Don't set reshape flag yet */
+               sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V190);
 
                /* Force writing of superblocks to disk */
                set_bit(MD_CHANGE_DEVS, &rdev->mddev->flags);
@@ -1800,7 +1799,7 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
         * Reshaping is supported, e.g. reshape_position is valid
         * in superblock and superblock content is authoritative.
         */
-       if (_test_flag(FEATURE_FLAG_SUPPORTS_V180, le32_to_cpu(sb->compat_features))) {
+       if (_test_flag(FEATURE_FLAG_SUPPORTS_V190, le32_to_cpu(sb->compat_features))) {
                /* Superblock is authoritative wrt given raid set layout! */
                mddev->raid_disks = le32_to_cpu(sb->num_devices);
                mddev->level = le32_to_cpu(sb->level);
@@ -1831,7 +1830,7 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
 
        } else {
                /*
-                * No takeover/reshaping, because we don't have the extended v1.8.0 metadata
+                * No takeover/reshaping, because we don't have the extended v1.9.0 metadata
                 */
                if (le32_to_cpu(sb->level) != mddev->level) {
                        DMERR("Reshaping/takeover raid sets not yet supported. (raid level/stripes/size change)");
@@ -2000,8 +1999,12 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev)
        if (!mddev->events && super_init_validation(rs, rdev))
                return -EINVAL;
 
-       if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V180 ||
-           sb->incompat_features) {
+       if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
+               rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags";
+               return -EINVAL;
+       }
+
+       if (sb->incompat_features) {
                rs->ti->error = "Unable to assemble array: No incompatible feature flags supported yet";
                return -EINVAL;
        }
@@ -2595,7 +2598,7 @@ static void raid_status(struct dm_target *ti, status_type_t type,
                DMEMIT(" %llu", (unsigned long long) resync_mismatches);
 
                /*
-                * v1.8.0+:
+                * v1.9.0+:
                 *
                 * data_offset (needed for out of space reshaping)
                 *   This field shows the data offset into the data
@@ -2622,46 +2625,46 @@ static void raid_status(struct dm_target *ti, status_type_t type,
                /* Emit table line */
                DMEMIT("%s %u %u", rs->raid_type->name, raid_param_cnt, mddev->new_chunk_sectors);
                if (_test_flag(CTR_FLAG_RAID10_FORMAT, rs->ctr_flags))
-                       DMEMIT(" %s %s", _argname_by_flag(CTR_FLAG_RAID10_FORMAT),
+                       DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT),
                                         raid10_md_layout_to_format(mddev->layout));
                if (_test_flag(CTR_FLAG_RAID10_COPIES, rs->ctr_flags))
-                       DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_RAID10_COPIES),
+                       DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES),
                                         raid10_md_layout_to_copies(mddev->layout));
                if (_test_flag(CTR_FLAG_NOSYNC, rs->ctr_flags))
-                       DMEMIT(" %s", _argname_by_flag(CTR_FLAG_NOSYNC));
+                       DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC));
                if (_test_flag(CTR_FLAG_SYNC, rs->ctr_flags))
-                       DMEMIT(" %s", _argname_by_flag(CTR_FLAG_SYNC));
+                       DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_SYNC));
                if (_test_flag(CTR_FLAG_REGION_SIZE, rs->ctr_flags))
-                       DMEMIT(" %s %llu", _argname_by_flag(CTR_FLAG_REGION_SIZE),
+                       DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE),
                                           (unsigned long long) to_sector(mddev->bitmap_info.chunksize));
                if (_test_flag(CTR_FLAG_DATA_OFFSET, rs->ctr_flags))
-                       DMEMIT(" %s %llu", _argname_by_flag(CTR_FLAG_DATA_OFFSET),
+                       DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET),
                                           (unsigned long long) rs->data_offset);
                if (_test_flag(CTR_FLAG_DAEMON_SLEEP, rs->ctr_flags))
-                       DMEMIT(" %s %lu", _argname_by_flag(CTR_FLAG_DAEMON_SLEEP),
+                       DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP),
                                          mddev->bitmap_info.daemon_sleep);
                if (_test_flag(CTR_FLAG_DELTA_DISKS, rs->ctr_flags))
-                       DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_DELTA_DISKS),
+                       DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS),
                                         mddev->delta_disks);
                if (_test_flag(CTR_FLAG_STRIPE_CACHE, rs->ctr_flags))
-                       DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_STRIPE_CACHE),
+                       DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE),
                                         max_nr_stripes);
                rdev_for_each(rdev, mddev)
                        if (test_bit(rdev->raid_disk, (void *) rs->rebuild_disks))
-                               DMEMIT(" %s %u", _argname_by_flag(CTR_FLAG_REBUILD),
+                               DMEMIT(" %s %u", dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD),
                                                 rdev->raid_disk);
                rdev_for_each(rdev, mddev)
                        if (test_bit(WriteMostly, &rdev->flags))
-                               DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_WRITE_MOSTLY),
+                               DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_WRITE_MOSTLY),
                                                 rdev->raid_disk);
                if (_test_flag(CTR_FLAG_MAX_WRITE_BEHIND, rs->ctr_flags))
-                       DMEMIT(" %s %lu", _argname_by_flag(CTR_FLAG_MAX_WRITE_BEHIND),
+                       DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND),
                                          mddev->bitmap_info.max_write_behind);
                if (_test_flag(CTR_FLAG_MAX_RECOVERY_RATE, rs->ctr_flags))
-                       DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_MAX_RECOVERY_RATE),
+                       DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE),
                                         mddev->sync_speed_max);
                if (_test_flag(CTR_FLAG_MIN_RECOVERY_RATE, rs->ctr_flags))
-                       DMEMIT(" %s %d", _argname_by_flag(CTR_FLAG_MIN_RECOVERY_RATE),
+                       DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE),
                                         mddev->sync_speed_min);
                DMEMIT(" %d", rs->raid_disks);
                rdev_for_each(rdev, mddev) {
@@ -2903,7 +2906,7 @@ static void raid_resume(struct dm_target *ti)
 
 static struct target_type raid_target = {
        .name = "raid",
-       .version = {1, 8, 1},
+       .version = {1, 9, 0},
        .module = THIS_MODULE,
        .ctr = raid_ctr,
        .dtr = raid_dtr,