On Mon, Apr 25, 2022 at 03:00:46PM -0700, Andrew Morton wrote: > On Mon, 25 Apr 2022 14:22:33 +0530 Jagdish Gediya <jvgediya@xxxxxxxxxxxxx> wrote: > > > At many places in kernel, It is necessary to convert sysfs input > > to corrosponding bool value e.g. "false" or "0" need to be converted > > to bool false, "true" or "1" need to be converted to bool true, > > places where such conversion is needed currently check the input > > string manually. Also, such conversions compare sysfs input using > > strncmp functions so even if certain number of character match in the > > beginning, they assume the string as valid bool, which is not the > > right semantic e.g. false is bool but falseX is not. > > > > Introduce new string helper function to convert sysfs input to > > corrosponding bool value. Modify existing such conversions to use > > this new function. > > > > logs, > > $ cat /sys/kernel/mm/numa/demotion_enabled > > false > > $ echo true > /sys/kernel/mm/numa/demotion_enabled > > $ cat demotion_enabled > > true > > $ echo truex > /sys/kernel/mm/numa/demotion_enabled > > -bash: echo: write error: Invalid argument > > $ echo 10 > /sys/kernel/mm/numa/demotion_enabled > > -bash: echo: write error: Invalid argument > > $ echo false > /sys/kernel/mm/numa/demotion_enabled > > $ cat demotion_enabled > > false > > $ echo falseabc > /sys/kernel/mm/numa/demotion_enabled > > -bash: echo: write error: Invalid argument > > $ echo 1 > /sys/kernel/mm/numa/demotion_enabled > > $ cat demotion_enabled > > true > > $ echo 0 > /sys/kernel/mm/numa/demotion_enabled > > $ cat demotion_enabled > > false > > > > This patch doesn't have any functionality change. > > > > ... > > > > --- a/lib/string_helpers.c > > +++ b/lib/string_helpers.c > > @@ -967,6 +967,26 @@ void memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, > > } > > EXPORT_SYMBOL(memcpy_and_pad); > > > > +/** > > + * sysfs_strbool - Get bool value corrosponding to string > > + * @s: The string to operate on. > > + * @output: Pointer to fill resulting bool value > > + * > > + * Returns 1 if string represents bool value, 0 otherwise > > + */ > > +int sysfs_strbool(const char *s, bool *output) > > +{ > > + if (sysfs_streq(s, "1") || sysfs_streq(s, "true")) > > + *output = true; > > + else if (sysfs_streq(s, "0") || sysfs_streq(s, "false")) > > + *output = false; > > + else > > + return 0; > > + > > + return 1; > > +} > > +EXPORT_SYMBOL(sysfs_strbool); > > + > > Can we teach kstrtobool() about "true" and "false" then use that? I think we can do that, I have sent v2. Thanks