linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).