]> sourceware.org Git - lvm2.git/commitdiff
raid: lvcreate and lvchange fail if --min_recovery_rate is defined 1079114472
authorHeinz Mauelshagen <heinzm@redhat.com>
Mon, 20 Nov 2023 16:05:59 +0000 (17:05 +0100)
committerHeinz Mauelshagen <heinzm@redhat.com>
Mon, 20 Nov 2023 16:14:01 +0000 (17:14 +0100)
Both commands default [raid_](min|max)recoveryrate to 0 but ensure
min_recovery_rate is not larger than max_recoveryrate.  This results
in command failure without requestinng the user to also define
max_recovery_rate >= min_recovery_rate.

Fix both commands by defining max_recovery_rate = min_recoveryrate
in case "lvcreate/lvchange --minrecoveryrate Size ..." requests a
larger value than current maxrecoveryrate without also giving option
"--maxrecoveryrate Size ..." with a size greater or equal than min.

tools/lvchange.c
tools/lvcreate.c

index c136be0c560a53ed66935bc27eafa4e08d4757a9..520880a029a5ffc597b023350d4956bdc2c010aa 100644 (file)
@@ -1013,8 +1013,8 @@ static int _lvchange_recovery_rate(struct logical_volume *lv,
 
        if (raid_seg->max_recovery_rate &&
            (raid_seg->max_recovery_rate < raid_seg->min_recovery_rate)) {
-               log_error("Minimum recovery rate cannot be higher than maximum.");
-               return 0;
+               log_print_unless_silent("Minimum recovery rate cannot be higher than maximum, adjusting.");
+               raid_seg->max_recovery_rate = raid_seg->min_recovery_rate;
        }
 
        /* Request caller to commit and reload metadata */
index 06d24430f0e7c45a4fa7a4778b54f0737b61f2cc..97a11fa00e72c067c2d687010bb0afd3f983cbd3 100644 (file)
@@ -595,8 +595,8 @@ static int _read_raid_params(struct cmd_context *cmd,
                lp->max_recovery_rate = arg_uint_value(cmd, maxrecoveryrate_ARG, 0) / 2;
 
                if (lp->min_recovery_rate > lp->max_recovery_rate) {
-                       log_error("Minimum recovery rate cannot be higher than maximum.");
-                       return 0;
+                       log_print_unless_silent("Minimum recovery rate cannot be higher than maximum, adjusting.");
+                       lp->max_recovery_rate > lp->min_recovery_rate;
                }
 
                if (lp->region_size < lp->stripe_size) {
This page took 0.038006 seconds and 5 git commands to generate.