diff mbox series

[2/2] ublk: Make ublks_max configurable

Message ID 20231001185448.48893-3-michael.christie@oracle.com (mailing list archive)
State New, archived
Headers show
Series ublk: Allow more than 64 ublk devices | expand

Commit Message

Mike Christie Oct. 1, 2023, 6:54 p.m. UTC
We are converting tcmu applications to ublk, but have systems with up
to 1k devices. This patch allows us to configure the ublks_max from
userspace with the ublks_max modparam.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
 drivers/block/ublk_drv.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

Comments

Ming Lei Oct. 3, 2023, 3:47 p.m. UTC | #1
On Sun, Oct 01, 2023 at 01:54:48PM -0500, Mike Christie wrote:
> We are converting tcmu applications to ublk, but have systems with up
> to 1k devices. This patch allows us to configure the ublks_max from
> userspace with the ublks_max modparam.
> 
> Signed-off-by: Mike Christie <michael.christie@oracle.com>
> ---
>  drivers/block/ublk_drv.c | 31 ++++++++++++++++++++++++++++++-
>  1 file changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
> index 18e352f8cd6d..2833a81e05c0 100644
> --- a/drivers/block/ublk_drv.c
> +++ b/drivers/block/ublk_drv.c
> @@ -2940,7 +2940,36 @@ static void __exit ublk_exit(void)
>  module_init(ublk_init);
>  module_exit(ublk_exit);
>  
> -module_param(ublks_max, int, 0444);
> +static int ublk_set_max_ublks(const char *buf, const struct kernel_param *kp)
> +{
> +	unsigned int max;
> +	int ret;
> +
> +	ret = kstrtouint(buf, 10, &max);
> +	if (ret)
> +		return ret;
> +
> +	if (max > UBLK_MAX_UBLKS) {
> +		pr_warn("Invalid ublks_max. Max supported is %d\n",
> +			UBLK_MAX_UBLKS);
> +		return -EINVAL;
> +	}
> +
> +	ublks_max = max;
> +	return ret;

It might be nice to reuse builtin helper:

	return param_set_uint_minmax(buf, kp, 0, UBLK_MAX_UBLKS);

> +}
> +
> +static int ublk_get_max_ublks(char *buf, const struct kernel_param *kp)
> +{
> +	return sysfs_emit(buf, "%d\n", ublks_max);
> +}
> +
> +static const struct kernel_param_ops ublk_max_ublks_ops = {
> +	.set = ublk_set_max_ublks,
> +	.get = ublk_get_max_ublks,

Same with above, '.get    = param_get_int,' could be better.

Otherwise, this patch looks fine.

Thanks,
Ming
Mike Christie Oct. 3, 2023, 3:54 p.m. UTC | #2
On 10/3/23 10:47 AM, Ming Lei wrote:
> On Sun, Oct 01, 2023 at 01:54:48PM -0500, Mike Christie wrote:
>> We are converting tcmu applications to ublk, but have systems with up
>> to 1k devices. This patch allows us to configure the ublks_max from
>> userspace with the ublks_max modparam.
>>
>> Signed-off-by: Mike Christie <michael.christie@oracle.com>
>> ---
>>  drivers/block/ublk_drv.c | 31 ++++++++++++++++++++++++++++++-
>>  1 file changed, 30 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
>> index 18e352f8cd6d..2833a81e05c0 100644
>> --- a/drivers/block/ublk_drv.c
>> +++ b/drivers/block/ublk_drv.c
>> @@ -2940,7 +2940,36 @@ static void __exit ublk_exit(void)
>>  module_init(ublk_init);
>>  module_exit(ublk_exit);
>>  
>> -module_param(ublks_max, int, 0444);
>> +static int ublk_set_max_ublks(const char *buf, const struct kernel_param *kp)
>> +{
>> +	unsigned int max;
>> +	int ret;
>> +
>> +	ret = kstrtouint(buf, 10, &max);
>> +	if (ret)
>> +		return ret;
>> +
>> +	if (max > UBLK_MAX_UBLKS) {
>> +		pr_warn("Invalid ublks_max. Max supported is %d\n",
>> +			UBLK_MAX_UBLKS);
>> +		return -EINVAL;
>> +	}
>> +
>> +	ublks_max = max;
>> +	return ret;
> 
> It might be nice to reuse builtin helper:
> 
> 	return param_set_uint_minmax(buf, kp, 0, UBLK_MAX_UBLKS);
> 

Was looking for something like that but missed it. Will
use.


>> +}
>> +
>> +static int ublk_get_max_ublks(char *buf, const struct kernel_param *kp)
>> +{
>> +	return sysfs_emit(buf, "%d\n", ublks_max);
>> +}
>> +
>> +static const struct kernel_param_ops ublk_max_ublks_ops = {
>> +	.set = ublk_set_max_ublks,
>> +	.get = ublk_get_max_ublks,
> 
> Same with above, '.get    = param_get_int,' could be better.
> 

Will do.
diff mbox series

Patch

diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index 18e352f8cd6d..2833a81e05c0 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -2940,7 +2940,36 @@  static void __exit ublk_exit(void)
 module_init(ublk_init);
 module_exit(ublk_exit);
 
-module_param(ublks_max, int, 0444);
+static int ublk_set_max_ublks(const char *buf, const struct kernel_param *kp)
+{
+	unsigned int max;
+	int ret;
+
+	ret = kstrtouint(buf, 10, &max);
+	if (ret)
+		return ret;
+
+	if (max > UBLK_MAX_UBLKS) {
+		pr_warn("Invalid ublks_max. Max supported is %d\n",
+			UBLK_MAX_UBLKS);
+		return -EINVAL;
+	}
+
+	ublks_max = max;
+	return ret;
+}
+
+static int ublk_get_max_ublks(char *buf, const struct kernel_param *kp)
+{
+	return sysfs_emit(buf, "%d\n", ublks_max);
+}
+
+static const struct kernel_param_ops ublk_max_ublks_ops = {
+	.set = ublk_set_max_ublks,
+	.get = ublk_get_max_ublks,
+};
+
+module_param_cb(ublks_max, &ublk_max_ublks_ops, NULL, 0644);
 MODULE_PARM_DESC(ublks_max, "max number of ublk devices allowed to add(default: 64)");
 
 MODULE_AUTHOR("Ming Lei <ming.lei@redhat.com>");