* [PATCH] md: convert to kstrto*()
@ 2015-05-16 11:02 Alexey Dobriyan
2015-05-18 2:12 ` NeilBrown
0 siblings, 1 reply; 2+ messages in thread
From: Alexey Dobriyan @ 2015-05-16 11:02 UTC (permalink / raw)
To: neilb; +Cc: linux-raid
Convert away from deprecated simple_strto*() functions.
Add "fit into sector_t" checks.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
drivers/md/md.c | 149 ++++++++++++++++++++++++++++++--------------------------
1 file changed, 81 insertions(+), 68 deletions(-)
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2630,13 +2630,14 @@ errors_show(struct md_rdev *rdev, char *page)
static ssize_t
errors_store(struct md_rdev *rdev, const char *buf, size_t len)
{
- char *e;
- unsigned long n = simple_strtoul(buf, &e, 10);
- if (*buf && (*e == 0 || *e == '\n')) {
- atomic_set(&rdev->corrected_errors, n);
- return len;
- }
- return -EINVAL;
+ unsigned int n;
+ int rv;
+
+ rv = kstrtouint(buf, 10, &n);
+ if (rv < 0)
+ return rv;
+ atomic_set(&rdev->corrected_errors, n);
+ return len;
}
static struct rdev_sysfs_entry rdev_errors =
__ATTR(errors, S_IRUGO|S_IWUSR, errors_show, errors_store);
@@ -2653,13 +2654,16 @@ slot_show(struct md_rdev *rdev, char *page)
static ssize_t
slot_store(struct md_rdev *rdev, const char *buf, size_t len)
{
- char *e;
+ int slot;
int err;
- int slot = simple_strtoul(buf, &e, 10);
+
if (strncmp(buf, "none", 4)==0)
slot = -1;
- else if (e==buf || (*e && *e!= '\n'))
- return -EINVAL;
+ else {
+ err = kstrtouint(buf, 10, (unsigned int *)&slot);
+ if (err < 0)
+ return err;
+ }
if (rdev->mddev->pers && slot == -1) {
/* Setting 'slot' on an active array requires also
* updating the 'rd%d' link, and communicating
@@ -3544,12 +3548,12 @@ layout_show(struct mddev *mddev, char *page)
static ssize_t
layout_store(struct mddev *mddev, const char *buf, size_t len)
{
- char *e;
- unsigned long n = simple_strtoul(buf, &e, 10);
+ unsigned int n;
int err;
- if (!*buf || (*e && *e != '\n'))
- return -EINVAL;
+ err = kstrtouint(buf, 10, &n);
+ if (err < 0)
+ return err;
err = mddev_lock(mddev);
if (err)
return err;
@@ -3593,12 +3597,12 @@ static int update_raid_disks(struct mddev *mddev, int raid_disks);
static ssize_t
raid_disks_store(struct mddev *mddev, const char *buf, size_t len)
{
- char *e;
+ unsigned int n;
int err;
- unsigned long n = simple_strtoul(buf, &e, 10);
- if (!*buf || (*e && *e != '\n'))
- return -EINVAL;
+ err = kstrtouint(buf, 10, &n);
+ if (err < 0)
+ return err;
err = mddev_lock(mddev);
if (err)
@@ -3645,12 +3649,12 @@ chunk_size_show(struct mddev *mddev, char *page)
static ssize_t
chunk_size_store(struct mddev *mddev, const char *buf, size_t len)
{
+ unsigned long n;
int err;
- char *e;
- unsigned long n = simple_strtoul(buf, &e, 10);
- if (!*buf || (*e && *e != '\n'))
- return -EINVAL;
+ err = kstrtoul(buf, 10, &n);
+ if (err < 0)
+ return err;
err = mddev_lock(mddev);
if (err)
@@ -3688,19 +3692,24 @@ resync_start_show(struct mddev *mddev, char *page)
static ssize_t
resync_start_store(struct mddev *mddev, const char *buf, size_t len)
{
+ unsigned long long n;
int err;
- char *e;
- unsigned long long n = simple_strtoull(buf, &e, 10);
+
+ if (cmd_match(buf, "none"))
+ n = MaxSector;
+ else {
+ err = kstrtoull(buf, 10, &n);
+ if (err < 0)
+ return err;
+ if (n != (sector_t)n)
+ return -EINVAL;
+ }
err = mddev_lock(mddev);
if (err)
return err;
if (mddev->pers && !test_bit(MD_RECOVERY_FROZEN, &mddev->recovery))
err = -EBUSY;
- else if (cmd_match(buf, "none"))
- n = MaxSector;
- else if (!*buf || (*e && *e != '\n'))
- err = -EINVAL;
if (!err) {
mddev->recovery_cp = n;
@@ -3936,14 +3945,14 @@ max_corrected_read_errors_show(struct mddev *mddev, char *page) {
static ssize_t
max_corrected_read_errors_store(struct mddev *mddev, const char *buf, size_t len)
{
- char *e;
- unsigned long n = simple_strtoul(buf, &e, 10);
+ unsigned int n;
+ int rv;
- if (*buf && (*e == 0 || *e == '\n')) {
- atomic_set(&mddev->max_corr_read_errors, n);
- return len;
- }
- return -EINVAL;
+ rv = kstrtouint(buf, 10, &n);
+ if (rv < 0)
+ return rv;
+ atomic_set(&mddev->max_corr_read_errors, n);
+ return len;
}
static struct md_sysfs_entry max_corr_read_errors =
@@ -4297,15 +4306,18 @@ sync_min_show(struct mddev *mddev, char *page)
static ssize_t
sync_min_store(struct mddev *mddev, const char *buf, size_t len)
{
- int min;
- char *e;
+ unsigned int min;
+ int rv;
+
if (strncmp(buf, "system", 6)==0) {
- mddev->sync_speed_min = 0;
- return len;
+ min = 0;
+ } else {
+ rv = kstrtouint(buf, 10, &min);
+ if (rv < 0)
+ return rv;
+ if (min == 0)
+ return -EINVAL;
}
- min = simple_strtoul(buf, &e, 10);
- if (buf == e || (*e && *e != '\n') || min <= 0)
- return -EINVAL;
mddev->sync_speed_min = min;
return len;
}
@@ -4323,15 +4335,18 @@ sync_max_show(struct mddev *mddev, char *page)
static ssize_t
sync_max_store(struct mddev *mddev, const char *buf, size_t len)
{
- int max;
- char *e;
+ unsigned int max;
+ int rv;
+
if (strncmp(buf, "system", 6)==0) {
- mddev->sync_speed_max = 0;
- return len;
+ max = 0;
+ } else {
+ rv = kstrtouint(buf, 10, &max);
+ if (rv < 0)
+ return rv;
+ if (max == 0)
+ return -EINVAL;
}
- max = simple_strtoul(buf, &e, 10);
- if (buf == e || (*e && *e != '\n') || max <= 0)
- return -EINVAL;
mddev->sync_speed_max = max;
return len;
}
@@ -4514,12 +4529,13 @@ suspend_lo_show(struct mddev *mddev, char *page)
static ssize_t
suspend_lo_store(struct mddev *mddev, const char *buf, size_t len)
{
- char *e;
- unsigned long long new = simple_strtoull(buf, &e, 10);
- unsigned long long old;
+ unsigned long long old, new;
int err;
- if (buf == e || (*e && *e != '\n'))
+ err = kstrtoull(buf, 10, &new);
+ if (err < 0)
+ return err;
+ if (new != (sector_t)new)
return -EINVAL;
err = mddev_lock(mddev);
@@ -4556,12 +4572,13 @@ suspend_hi_show(struct mddev *mddev, char *page)
static ssize_t
suspend_hi_store(struct mddev *mddev, const char *buf, size_t len)
{
- char *e;
- unsigned long long new = simple_strtoull(buf, &e, 10);
- unsigned long long old;
+ unsigned long long old, new;
int err;
- if (buf == e || (*e && *e != '\n'))
+ err = kstrtoull(buf, 10, &new);
+ if (err < 0)
+ return err;
+ if (new != (sector_t)new)
return -EINVAL;
err = mddev_lock(mddev);
@@ -4603,11 +4620,13 @@ static ssize_t
reshape_position_store(struct mddev *mddev, const char *buf, size_t len)
{
struct md_rdev *rdev;
- char *e;
+ unsigned long long new;
int err;
- unsigned long long new = simple_strtoull(buf, &e, 10);
- if (buf == e || (*e && *e != '\n'))
+ err = kstrtoull(buf, 10, &new);
+ if (err < 0)
+ return err;
+ if (new != (sector_t)new)
return -EINVAL;
err = mddev_lock(mddev);
if (err)
@@ -9009,13 +9028,7 @@ static int get_ro(char *buffer, struct kernel_param *kp)
}
static int set_ro(const char *val, struct kernel_param *kp)
{
- char *e;
- int num = simple_strtoul(val, &e, 10);
- if (*val && (*e == '\0' || *e == '\n')) {
- start_readonly = num;
- return 0;
- }
- return -EINVAL;
+ return kstrtouint(val, 10, (unsigned int *)&start_readonly);
}
module_param_call(start_ro, set_ro, get_ro, NULL, S_IRUSR|S_IWUSR);
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] md: convert to kstrto*()
2015-05-16 11:02 [PATCH] md: convert to kstrto*() Alexey Dobriyan
@ 2015-05-18 2:12 ` NeilBrown
0 siblings, 0 replies; 2+ messages in thread
From: NeilBrown @ 2015-05-18 2:12 UTC (permalink / raw)
To: Alexey Dobriyan; +Cc: linux-raid
[-- Attachment #1: Type: text/plain, Size: 8253 bytes --]
On Sat, 16 May 2015 14:02:38 +0300 Alexey Dobriyan <adobriyan@gmail.com>
wrote:
> Convert away from deprecated simple_strto*() functions.
>
> Add "fit into sector_t" checks.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> ---
>
> drivers/md/md.c | 149 ++++++++++++++++++++++++++++++--------------------------
> 1 file changed, 81 insertions(+), 68 deletions(-)
>
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -2630,13 +2630,14 @@ errors_show(struct md_rdev *rdev, char *page)
> static ssize_t
> errors_store(struct md_rdev *rdev, const char *buf, size_t len)
> {
> - char *e;
> - unsigned long n = simple_strtoul(buf, &e, 10);
> - if (*buf && (*e == 0 || *e == '\n')) {
> - atomic_set(&rdev->corrected_errors, n);
> - return len;
> - }
> - return -EINVAL;
> + unsigned int n;
> + int rv;
> +
> + rv = kstrtouint(buf, 10, &n);
> + if (rv < 0)
> + return rv;
> + atomic_set(&rdev->corrected_errors, n);
> + return len;
> }
> static struct rdev_sysfs_entry rdev_errors =
> __ATTR(errors, S_IRUGO|S_IWUSR, errors_show, errors_store);
> @@ -2653,13 +2654,16 @@ slot_show(struct md_rdev *rdev, char *page)
> static ssize_t
> slot_store(struct md_rdev *rdev, const char *buf, size_t len)
> {
> - char *e;
> + int slot;
> int err;
> - int slot = simple_strtoul(buf, &e, 10);
> +
> if (strncmp(buf, "none", 4)==0)
> slot = -1;
> - else if (e==buf || (*e && *e!= '\n'))
> - return -EINVAL;
> + else {
> + err = kstrtouint(buf, 10, (unsigned int *)&slot);
> + if (err < 0)
> + return err;
> + }
> if (rdev->mddev->pers && slot == -1) {
> /* Setting 'slot' on an active array requires also
> * updating the 'rd%d' link, and communicating
> @@ -3544,12 +3548,12 @@ layout_show(struct mddev *mddev, char *page)
> static ssize_t
> layout_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - char *e;
> - unsigned long n = simple_strtoul(buf, &e, 10);
> + unsigned int n;
> int err;
>
> - if (!*buf || (*e && *e != '\n'))
> - return -EINVAL;
> + err = kstrtouint(buf, 10, &n);
> + if (err < 0)
> + return err;
> err = mddev_lock(mddev);
> if (err)
> return err;
> @@ -3593,12 +3597,12 @@ static int update_raid_disks(struct mddev *mddev, int raid_disks);
> static ssize_t
> raid_disks_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - char *e;
> + unsigned int n;
> int err;
> - unsigned long n = simple_strtoul(buf, &e, 10);
>
> - if (!*buf || (*e && *e != '\n'))
> - return -EINVAL;
> + err = kstrtouint(buf, 10, &n);
> + if (err < 0)
> + return err;
>
> err = mddev_lock(mddev);
> if (err)
> @@ -3645,12 +3649,12 @@ chunk_size_show(struct mddev *mddev, char *page)
> static ssize_t
> chunk_size_store(struct mddev *mddev, const char *buf, size_t len)
> {
> + unsigned long n;
> int err;
> - char *e;
> - unsigned long n = simple_strtoul(buf, &e, 10);
>
> - if (!*buf || (*e && *e != '\n'))
> - return -EINVAL;
> + err = kstrtoul(buf, 10, &n);
> + if (err < 0)
> + return err;
>
> err = mddev_lock(mddev);
> if (err)
> @@ -3688,19 +3692,24 @@ resync_start_show(struct mddev *mddev, char *page)
> static ssize_t
> resync_start_store(struct mddev *mddev, const char *buf, size_t len)
> {
> + unsigned long long n;
> int err;
> - char *e;
> - unsigned long long n = simple_strtoull(buf, &e, 10);
> +
> + if (cmd_match(buf, "none"))
> + n = MaxSector;
> + else {
> + err = kstrtoull(buf, 10, &n);
> + if (err < 0)
> + return err;
> + if (n != (sector_t)n)
> + return -EINVAL;
> + }
>
> err = mddev_lock(mddev);
> if (err)
> return err;
> if (mddev->pers && !test_bit(MD_RECOVERY_FROZEN, &mddev->recovery))
> err = -EBUSY;
> - else if (cmd_match(buf, "none"))
> - n = MaxSector;
> - else if (!*buf || (*e && *e != '\n'))
> - err = -EINVAL;
>
> if (!err) {
> mddev->recovery_cp = n;
> @@ -3936,14 +3945,14 @@ max_corrected_read_errors_show(struct mddev *mddev, char *page) {
> static ssize_t
> max_corrected_read_errors_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - char *e;
> - unsigned long n = simple_strtoul(buf, &e, 10);
> + unsigned int n;
> + int rv;
>
> - if (*buf && (*e == 0 || *e == '\n')) {
> - atomic_set(&mddev->max_corr_read_errors, n);
> - return len;
> - }
> - return -EINVAL;
> + rv = kstrtouint(buf, 10, &n);
> + if (rv < 0)
> + return rv;
> + atomic_set(&mddev->max_corr_read_errors, n);
> + return len;
> }
>
> static struct md_sysfs_entry max_corr_read_errors =
> @@ -4297,15 +4306,18 @@ sync_min_show(struct mddev *mddev, char *page)
> static ssize_t
> sync_min_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - int min;
> - char *e;
> + unsigned int min;
> + int rv;
> +
> if (strncmp(buf, "system", 6)==0) {
> - mddev->sync_speed_min = 0;
> - return len;
> + min = 0;
> + } else {
> + rv = kstrtouint(buf, 10, &min);
> + if (rv < 0)
> + return rv;
> + if (min == 0)
> + return -EINVAL;
> }
> - min = simple_strtoul(buf, &e, 10);
> - if (buf == e || (*e && *e != '\n') || min <= 0)
> - return -EINVAL;
> mddev->sync_speed_min = min;
> return len;
> }
> @@ -4323,15 +4335,18 @@ sync_max_show(struct mddev *mddev, char *page)
> static ssize_t
> sync_max_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - int max;
> - char *e;
> + unsigned int max;
> + int rv;
> +
> if (strncmp(buf, "system", 6)==0) {
> - mddev->sync_speed_max = 0;
> - return len;
> + max = 0;
> + } else {
> + rv = kstrtouint(buf, 10, &max);
> + if (rv < 0)
> + return rv;
> + if (max == 0)
> + return -EINVAL;
> }
> - max = simple_strtoul(buf, &e, 10);
> - if (buf == e || (*e && *e != '\n') || max <= 0)
> - return -EINVAL;
> mddev->sync_speed_max = max;
> return len;
> }
> @@ -4514,12 +4529,13 @@ suspend_lo_show(struct mddev *mddev, char *page)
> static ssize_t
> suspend_lo_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - char *e;
> - unsigned long long new = simple_strtoull(buf, &e, 10);
> - unsigned long long old;
> + unsigned long long old, new;
> int err;
>
> - if (buf == e || (*e && *e != '\n'))
> + err = kstrtoull(buf, 10, &new);
> + if (err < 0)
> + return err;
> + if (new != (sector_t)new)
> return -EINVAL;
>
> err = mddev_lock(mddev);
> @@ -4556,12 +4572,13 @@ suspend_hi_show(struct mddev *mddev, char *page)
> static ssize_t
> suspend_hi_store(struct mddev *mddev, const char *buf, size_t len)
> {
> - char *e;
> - unsigned long long new = simple_strtoull(buf, &e, 10);
> - unsigned long long old;
> + unsigned long long old, new;
> int err;
>
> - if (buf == e || (*e && *e != '\n'))
> + err = kstrtoull(buf, 10, &new);
> + if (err < 0)
> + return err;
> + if (new != (sector_t)new)
> return -EINVAL;
>
> err = mddev_lock(mddev);
> @@ -4603,11 +4620,13 @@ static ssize_t
> reshape_position_store(struct mddev *mddev, const char *buf, size_t len)
> {
> struct md_rdev *rdev;
> - char *e;
> + unsigned long long new;
> int err;
> - unsigned long long new = simple_strtoull(buf, &e, 10);
>
> - if (buf == e || (*e && *e != '\n'))
> + err = kstrtoull(buf, 10, &new);
> + if (err < 0)
> + return err;
> + if (new != (sector_t)new)
> return -EINVAL;
> err = mddev_lock(mddev);
> if (err)
> @@ -9009,13 +9028,7 @@ static int get_ro(char *buffer, struct kernel_param *kp)
> }
> static int set_ro(const char *val, struct kernel_param *kp)
> {
> - char *e;
> - int num = simple_strtoul(val, &e, 10);
> - if (*val && (*e == '\0' || *e == '\n')) {
> - start_readonly = num;
> - return 0;
> - }
> - return -EINVAL;
> + return kstrtouint(val, 10, (unsigned int *)&start_readonly);
> }
>
> module_param_call(start_ro, set_ro, get_ro, NULL, S_IRUSR|S_IWUSR);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Looks good - thanks.
I'll queue for the next merge window.
Thanks,
NeilBrown
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 811 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-05-18 2:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-16 11:02 [PATCH] md: convert to kstrto*() Alexey Dobriyan
2015-05-18 2:12 ` NeilBrown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).