netconsole: Use kstrtobool() instead of kstrtoint()
authorBreno Leitao <leitao@debian.org>
Fri, 21 Jul 2023 09:21:45 +0000 (02:21 -0700)
committerJakub Kicinski <kuba@kernel.org>
Mon, 24 Jul 2023 23:06:20 +0000 (16:06 -0700)
Replace kstrtoint() by kstrtobool() in the sysfs _store() functions.
This improves the user usability and simplify the code.

With this fix, it is now possible to use [YyNn] to set and unset a
feature. Old behaviour is still unchanged.

kstrtobool() is also safer and doesn't need the extra validation that
is required when converting a string to bool (end field in the struct),
which makes the code simpler.

Suggested-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20230721092146.4036622-2-leitao@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/netconsole.c

index a3c53b8..87f18ae 100644 (file)
@@ -333,17 +333,15 @@ static ssize_t enabled_store(struct config_item *item,
 {
        struct netconsole_target *nt = to_target(item);
        unsigned long flags;
-       int enabled;
+       bool enabled;
        int err;
 
        mutex_lock(&dynamic_netconsole_mutex);
-       err = kstrtoint(buf, 10, &enabled);
-       if (err < 0)
+       err = kstrtobool(buf, &enabled);
+       if (err)
                goto out_unlock;
 
        err = -EINVAL;
-       if (enabled < 0 || enabled > 1)
-               goto out_unlock;
        if ((bool)enabled == nt->enabled) {
                pr_info("network logging has already %s\n",
                        nt->enabled ? "started" : "stopped");
@@ -394,7 +392,7 @@ static ssize_t release_store(struct config_item *item, const char *buf,
                             size_t count)
 {
        struct netconsole_target *nt = to_target(item);
-       int release;
+       bool release;
        int err;
 
        mutex_lock(&dynamic_netconsole_mutex);
@@ -405,13 +403,9 @@ static ssize_t release_store(struct config_item *item, const char *buf,
                goto out_unlock;
        }
 
-       err = kstrtoint(buf, 10, &release);
-       if (err < 0)
-               goto out_unlock;
-       if (release < 0 || release > 1) {
-               err = -EINVAL;
+       err = kstrtobool(buf, &release);
+       if (err)
                goto out_unlock;
-       }
 
        nt->release = release;
 
@@ -426,7 +420,7 @@ static ssize_t extended_store(struct config_item *item, const char *buf,
                size_t count)
 {
        struct netconsole_target *nt = to_target(item);
-       int extended;
+       bool extended;
        int err;
 
        mutex_lock(&dynamic_netconsole_mutex);
@@ -437,13 +431,9 @@ static ssize_t extended_store(struct config_item *item, const char *buf,
                goto out_unlock;
        }
 
-       err = kstrtoint(buf, 10, &extended);
-       if (err < 0)
-               goto out_unlock;
-       if (extended < 0 || extended > 1) {
-               err = -EINVAL;
+       err = kstrtobool(buf, &extended);
+       if (err)
                goto out_unlock;
-       }
 
        nt->extended = extended;