btrfs: sysfs: accept size suffixes for read policy values
authorAnand Jain <anand.jain@oracle.com>
Wed, 29 Jan 2025 15:21:46 +0000 (23:21 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:48 +0000 (20:35 +0100)
We now parse human-friendly size values (e.g. '1G', '2M') when setting
read policies.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/sysfs.c

index 14f53f757555388483025673d86539436ecfb22b..974e8a75e3ab56ecac646466c0b2824664be4d2e 100644 (file)
@@ -1342,17 +1342,18 @@ int btrfs_read_policy_to_enum(const char *str, s64 *value_ret)
        /* Separate value from input in policy:value format. */
        value_str = strchr(param, ':');
        if (value_str) {
-               int ret;
+               char *retptr;
 
                *value_str = 0;
                value_str++;
                if (!value_ret)
                        return -EINVAL;
-               ret = kstrtos64(value_str, 10, value_ret);
-               if (ret)
+
+               *value_ret = memparse(value_str, &retptr);
+               /* There could be any trailing typos after the value. */
+               retptr = skip_spaces(retptr);
+               if (*retptr != 0 || *value_ret <= 0)
                        return -EINVAL;
-               if (*value_ret < 0)
-                       return -ERANGE;
        }
 #endif