]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: sysfs: add btrfs_read_policy_to_enum() helper and refactor read policy store
authorAnand Jain <anand.jain@oracle.com>
Wed, 1 Jan 2025 18:06:32 +0000 (02:06 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 13 Jan 2025 13:53:21 +0000 (14:53 +0100)
Introduce btrfs_read_policy_to_enum() helper to simplify the conversion
of a string read policy to its corresponding enum value. This reduces
duplication and improves code clarity in btrfs_read_policy_store().

The parameter is copied locally to allow modification, enabling the
separation of the method and its value. This prepares for the addition of
more functionality in subsequent patches.

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 ab18b4e594680a450bdf8387c8c78bd5d3aa8632..78b4af72997b38abc90b429cc22965f0456aaa33 100644 (file)
@@ -1307,6 +1307,18 @@ BTRFS_ATTR(, temp_fsid, btrfs_temp_fsid_show);
 
 static const char * const btrfs_read_policy_name[] = { "pid" };
 
+static int btrfs_read_policy_to_enum(const char *str)
+{
+       char param[32] = { 0 };
+
+       if (!str || strlen(str) == 0)
+               return 0;
+
+       strncpy(param, str, sizeof(param) - 1);
+
+       return sysfs_match_string(btrfs_read_policy_name, param);
+}
+
 static ssize_t btrfs_read_policy_show(struct kobject *kobj,
                                      struct kobj_attribute *a, char *buf)
 {
@@ -1338,21 +1350,19 @@ static ssize_t btrfs_read_policy_store(struct kobject *kobj,
                                       const char *buf, size_t len)
 {
        struct btrfs_fs_devices *fs_devices = to_fs_devs(kobj);
-       int i;
+       int index;
 
-       for (i = 0; i < BTRFS_NR_READ_POLICY; i++) {
-               if (sysfs_streq(buf, btrfs_read_policy_name[i])) {
-                       if (i != READ_ONCE(fs_devices->read_policy)) {
-                               WRITE_ONCE(fs_devices->read_policy, i);
-                               btrfs_info(fs_devices->fs_info,
-                                          "read policy set to '%s'",
-                                          btrfs_read_policy_name[i]);
-                       }
-                       return len;
-               }
+       index = btrfs_read_policy_to_enum(buf);
+       if (index < 0)
+               return -EINVAL;
+
+       if (index != READ_ONCE(fs_devices->read_policy)) {
+               WRITE_ONCE(fs_devices->read_policy, index);
+               btrfs_info(fs_devices->fs_info, "read policy set to '%s'",
+                          btrfs_read_policy_name[index]);
        }
 
-       return -EINVAL;
+       return len;
 }
 BTRFS_ATTR_RW(, read_policy, btrfs_read_policy_show, btrfs_read_policy_store);