[PATCH 09/10] ocfs2: convert to parse_integer()/kstrto*()
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*()
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,