params: lift param_set_uint_minmax to common code
It is a useful helper hence move it to common code so others can enjoy it. Suggested-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
9ea9b9c483
commit
2a14c9ae15
|
@ -431,6 +431,8 @@ extern int param_get_int(char *buffer, const struct kernel_param *kp);
|
||||||
extern const struct kernel_param_ops param_ops_uint;
|
extern const struct kernel_param_ops param_ops_uint;
|
||||||
extern int param_set_uint(const char *val, const struct kernel_param *kp);
|
extern int param_set_uint(const char *val, const struct kernel_param *kp);
|
||||||
extern int param_get_uint(char *buffer, const struct kernel_param *kp);
|
extern int param_get_uint(char *buffer, const struct kernel_param *kp);
|
||||||
|
int param_set_uint_minmax(const char *val, const struct kernel_param *kp,
|
||||||
|
unsigned int min, unsigned int max);
|
||||||
#define param_check_uint(name, p) __param_check(name, p, unsigned int)
|
#define param_check_uint(name, p) __param_check(name, p, unsigned int)
|
||||||
|
|
||||||
extern const struct kernel_param_ops param_ops_long;
|
extern const struct kernel_param_ops param_ops_long;
|
||||||
|
|
|
@ -243,6 +243,24 @@ STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", kstrtoul);
|
||||||
STANDARD_PARAM_DEF(ullong, unsigned long long, "%llu", kstrtoull);
|
STANDARD_PARAM_DEF(ullong, unsigned long long, "%llu", kstrtoull);
|
||||||
STANDARD_PARAM_DEF(hexint, unsigned int, "%#08x", kstrtouint);
|
STANDARD_PARAM_DEF(hexint, unsigned int, "%#08x", kstrtouint);
|
||||||
|
|
||||||
|
int param_set_uint_minmax(const char *val, const struct kernel_param *kp,
|
||||||
|
unsigned int min, unsigned int max)
|
||||||
|
{
|
||||||
|
unsigned int num;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!val)
|
||||||
|
return -EINVAL;
|
||||||
|
ret = kstrtouint(val, 0, &num);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
if (num < min || num > max)
|
||||||
|
return -EINVAL;
|
||||||
|
*((unsigned int *)kp->arg) = num;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(param_set_uint_minmax);
|
||||||
|
|
||||||
int param_set_charp(const char *val, const struct kernel_param *kp)
|
int param_set_charp(const char *val, const struct kernel_param *kp)
|
||||||
{
|
{
|
||||||
if (strlen(val) > 1024) {
|
if (strlen(val) > 1024) {
|
||||||
|
|
|
@ -3149,24 +3149,6 @@ void cleanup_socket_xprt(void)
|
||||||
xprt_unregister_transport(&xs_bc_tcp_transport);
|
xprt_unregister_transport(&xs_bc_tcp_transport);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int param_set_uint_minmax(const char *val,
|
|
||||||
const struct kernel_param *kp,
|
|
||||||
unsigned int min, unsigned int max)
|
|
||||||
{
|
|
||||||
unsigned int num;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!val)
|
|
||||||
return -EINVAL;
|
|
||||||
ret = kstrtouint(val, 0, &num);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
if (num < min || num > max)
|
|
||||||
return -EINVAL;
|
|
||||||
*((unsigned int *)kp->arg) = num;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int param_set_portnr(const char *val, const struct kernel_param *kp)
|
static int param_set_portnr(const char *val, const struct kernel_param *kp)
|
||||||
{
|
{
|
||||||
return param_set_uint_minmax(val, kp,
|
return param_set_uint_minmax(val, kp,
|
||||||
|
|
Loading…
Reference in New Issue