[PATCH 09/10] ocfs2: convert to parse_integer()/kstrto*()

2015-05-01 Thread Alexey Dobriyan
Convert away from deprecated simple_strto*() interfaces.

Autodetection of value range from type allows to remove disgusting checks:

if ((major == LONG_MIN) || (major == LONG_MAX) ||
(major > (u8)-1) || (major < 1))
return -ERANGE;
if ((minor == LONG_MIN) || (minor == LONG_MAX) ||
(minor > (u8)-1) || (minor < 0))

Poof, they're gone!

Signed-off-by: Alexey Dobriyan 
---

 fs/ocfs2/cluster/heartbeat.c   |   54 +
 fs/ocfs2/cluster/nodemanager.c |   50 -
 fs/ocfs2/stack_user.c  |   50 ++---
 3 files changed, 70 insertions(+), 84 deletions(-)

--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -1484,13 +1484,12 @@ static int o2hb_read_block_input(struct o2hb_region 
*reg,
 unsigned long *ret_bytes,
 unsigned int *ret_bits)
 {
-   unsigned long bytes;
-   char *p = (char *)page;
-
-   bytes = simple_strtoul(p, , 0);
-   if (!p || (*p && (*p != '\n')))
-   return -EINVAL;
+   unsigned int bytes;
+   int rv;
 
+   rv = kstrtouint(page, 0, );
+   if (rv < 0)
+   return rv;
/* Heartbeat and fs min / max block sizes are the same. */
if (bytes > 4096 || bytes < 512)
return -ERANGE;
@@ -1543,18 +1542,14 @@ static ssize_t o2hb_region_start_block_write(struct 
o2hb_region *reg,
 const char *page,
 size_t count)
 {
-   unsigned long long tmp;
-   char *p = (char *)page;
+   int rv;
 
if (reg->hr_bdev)
return -EINVAL;
 
-   tmp = simple_strtoull(p, , 0);
-   if (!p || (*p && (*p != '\n')))
-   return -EINVAL;
-
-   reg->hr_start_block = tmp;
-
+   rv = kstrtoull(page, 0, >hr_start_block);
+   if (rv < 0)
+   return rv;
return count;
 }
 
@@ -1568,20 +1563,19 @@ static ssize_t o2hb_region_blocks_write(struct 
o2hb_region *reg,
const char *page,
size_t count)
 {
-   unsigned long tmp;
-   char *p = (char *)page;
+   unsigned int tmp;
+   int rv;
 
if (reg->hr_bdev)
return -EINVAL;
 
-   tmp = simple_strtoul(p, , 0);
-   if (!p || (*p && (*p != '\n')))
-   return -EINVAL;
-
+   rv = kstrtouint(page, 0, );
+   if (rv < 0)
+   return rv;
if (tmp > O2NM_MAX_NODES || tmp == 0)
return -ERANGE;
 
-   reg->hr_blocks = (unsigned int)tmp;
+   reg->hr_blocks = tmp;
 
return count;
 }
@@ -1717,9 +1711,8 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region 
*reg,
 size_t count)
 {
struct task_struct *hb_task;
-   long fd;
+   int fd;
int sectsize;
-   char *p = (char *)page;
struct fd f;
struct inode *inode;
ssize_t ret = -EINVAL;
@@ -1733,10 +1726,9 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region 
*reg,
if (o2nm_this_node() == O2NM_MAX_NODES)
goto out;
 
-   fd = simple_strtol(p, , 0);
-   if (!p || (*p && (*p != '\n')))
+   ret = kstrtoint(page, 0, );
+   if (ret < 0)
goto out;
-
if (fd < 0 || fd >= INT_MAX)
goto out;
 
@@ -2210,12 +2202,12 @@ static ssize_t 
o2hb_heartbeat_group_threshold_store(struct o2hb_heartbeat_group
const char *page,
size_t count)
 {
-   unsigned long tmp;
-   char *p = (char *)page;
+   unsigned int tmp;
+   int rv;
 
-   tmp = simple_strtoul(p, , 10);
-   if (!p || (*p && (*p != '\n')))
-return -EINVAL;
+   rv = kstrtouint(page, 10, );
+   if (rv < 0)
+   return rv;
 
/* this will validate ranges for us. */
o2hb_dead_threshold_set((unsigned int) tmp);
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -195,13 +195,12 @@ static ssize_t o2nm_node_num_write(struct o2nm_node 
*node, const char *page,
   size_t count)
 {
struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node);
-   unsigned long tmp;
-   char *p = (char *)page;
-
-   tmp = simple_strtoul(p, , 0);
-   if (!p || (*p && (*p != '\n')))
-   return -EINVAL;
+   unsigned int tmp;
+   int rv;
 
+   rv = parse_integer(page, 0, );
+   if (rv < 0)
+   return rv;
if (tmp >= O2NM_MAX_NODES)
return -ERANGE;
 
@@ -215,16 +214,15 @@ static ssize_t o2nm_node_num_write(struct o2nm_node 
*node, const char *page,
 
write_lock(>cl_nodes_lock);

[PATCH 09/10] ocfs2: convert to parse_integer()/kstrto*()

2015-05-01 Thread Alexey Dobriyan
Convert away from deprecated simple_strto*() interfaces.

Autodetection of value range from type allows to remove disgusting checks:

if ((major == LONG_MIN) || (major == LONG_MAX) ||
(major  (u8)-1) || (major  1))
return -ERANGE;
if ((minor == LONG_MIN) || (minor == LONG_MAX) ||
(minor  (u8)-1) || (minor  0))

Poof, they're gone!

Signed-off-by: Alexey Dobriyan adobri...@gmail.com
---

 fs/ocfs2/cluster/heartbeat.c   |   54 +
 fs/ocfs2/cluster/nodemanager.c |   50 -
 fs/ocfs2/stack_user.c  |   50 ++---
 3 files changed, 70 insertions(+), 84 deletions(-)

--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -1484,13 +1484,12 @@ static int o2hb_read_block_input(struct o2hb_region 
*reg,
 unsigned long *ret_bytes,
 unsigned int *ret_bits)
 {
-   unsigned long bytes;
-   char *p = (char *)page;
-
-   bytes = simple_strtoul(p, p, 0);
-   if (!p || (*p  (*p != '\n')))
-   return -EINVAL;
+   unsigned int bytes;
+   int rv;
 
+   rv = kstrtouint(page, 0, bytes);
+   if (rv  0)
+   return rv;
/* Heartbeat and fs min / max block sizes are the same. */
if (bytes  4096 || bytes  512)
return -ERANGE;
@@ -1543,18 +1542,14 @@ static ssize_t o2hb_region_start_block_write(struct 
o2hb_region *reg,
 const char *page,
 size_t count)
 {
-   unsigned long long tmp;
-   char *p = (char *)page;
+   int rv;
 
if (reg-hr_bdev)
return -EINVAL;
 
-   tmp = simple_strtoull(p, p, 0);
-   if (!p || (*p  (*p != '\n')))
-   return -EINVAL;
-
-   reg-hr_start_block = tmp;
-
+   rv = kstrtoull(page, 0, reg-hr_start_block);
+   if (rv  0)
+   return rv;
return count;
 }
 
@@ -1568,20 +1563,19 @@ static ssize_t o2hb_region_blocks_write(struct 
o2hb_region *reg,
const char *page,
size_t count)
 {
-   unsigned long tmp;
-   char *p = (char *)page;
+   unsigned int tmp;
+   int rv;
 
if (reg-hr_bdev)
return -EINVAL;
 
-   tmp = simple_strtoul(p, p, 0);
-   if (!p || (*p  (*p != '\n')))
-   return -EINVAL;
-
+   rv = kstrtouint(page, 0, tmp);
+   if (rv  0)
+   return rv;
if (tmp  O2NM_MAX_NODES || tmp == 0)
return -ERANGE;
 
-   reg-hr_blocks = (unsigned int)tmp;
+   reg-hr_blocks = tmp;
 
return count;
 }
@@ -1717,9 +1711,8 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region 
*reg,
 size_t count)
 {
struct task_struct *hb_task;
-   long fd;
+   int fd;
int sectsize;
-   char *p = (char *)page;
struct fd f;
struct inode *inode;
ssize_t ret = -EINVAL;
@@ -1733,10 +1726,9 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region 
*reg,
if (o2nm_this_node() == O2NM_MAX_NODES)
goto out;
 
-   fd = simple_strtol(p, p, 0);
-   if (!p || (*p  (*p != '\n')))
+   ret = kstrtoint(page, 0, fd);
+   if (ret  0)
goto out;
-
if (fd  0 || fd = INT_MAX)
goto out;
 
@@ -2210,12 +2202,12 @@ static ssize_t 
o2hb_heartbeat_group_threshold_store(struct o2hb_heartbeat_group
const char *page,
size_t count)
 {
-   unsigned long tmp;
-   char *p = (char *)page;
+   unsigned int tmp;
+   int rv;
 
-   tmp = simple_strtoul(p, p, 10);
-   if (!p || (*p  (*p != '\n')))
-return -EINVAL;
+   rv = kstrtouint(page, 10, tmp);
+   if (rv  0)
+   return rv;
 
/* this will validate ranges for us. */
o2hb_dead_threshold_set((unsigned int) tmp);
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -195,13 +195,12 @@ static ssize_t o2nm_node_num_write(struct o2nm_node 
*node, const char *page,
   size_t count)
 {
struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node);
-   unsigned long tmp;
-   char *p = (char *)page;
-
-   tmp = simple_strtoul(p, p, 0);
-   if (!p || (*p  (*p != '\n')))
-   return -EINVAL;
+   unsigned int tmp;
+   int rv;
 
+   rv = parse_integer(page, 0, tmp);
+   if (rv  0)
+   return rv;
if (tmp = O2NM_MAX_NODES)
return -ERANGE;
 
@@ -215,16 +214,15 @@ static ssize_t o2nm_node_num_write(struct o2nm_node 
*node, const char *page,