Re: [PATCH 2/9] null_blk: check for valid submit_queue value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/30/23 14:51, Chaitanya Kulkarni wrote:
> Right now we don't check for valid module parameter value for
> submit_queue, that allows user to set negative values.
> 
> Add a callback null_set_submit_queues() to error out when submit_queue
> value is < 1 before module is loaded.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@xxxxxxxxxx>
> ---
>  drivers/block/null_blk/main.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c
> index cf6937f4cfa1..9e3df92d0b98 100644
> --- a/drivers/block/null_blk/main.c
> +++ b/drivers/block/null_blk/main.c
> @@ -100,8 +100,18 @@ static int g_no_sched;
>  module_param_named(no_sched, g_no_sched, int, 0444);
>  MODULE_PARM_DESC(no_sched, "No io scheduler");
>  
> +static int null_set_submit_queues(const char *s, const struct kernel_param *kp)
> +{
> +	return null_param_store_int(s, kp->arg, 1, INT_MAX);
> +}
> +
> +static const struct kernel_param_ops null_submit_queues_param_ops = {
> +	.set	= null_set_submit_queues,
> +	.get	= param_get_int,
> +};
> +
>  static int g_submit_queues = 1;
> -module_param_named(submit_queues, g_submit_queues, int, 0444);
> +device_param_cb(submit_queues, &null_submit_queues_param_ops, &g_submit_queues, 0444);
>  MODULE_PARM_DESC(submit_queues, "Number of submission queues");
>  
>  static int g_poll_queues = 1;

I would do this:

+#define NULL_PARAM(_name, _min, _max)                                  \
+static int null_param_##_name##_set(const char *s,                     \
+                                   const struct kernel_param *kp)      \
+{                                                                      \
+       return null_param_store_int(s, kp->arg, _min, _max);            \
+}                                                                      \
+                                                                       \
+static const struct kernel_param_ops null_##_name##_param_ops = {      \
+       .set    = null_param_##_name##_set,                             \
+       .get    = param_get_int,                                        \
+}
+

And then have:

+NULL_PARAM(submit_queues, 1, INT_MAX);
+NULL_PARAM(poll_queues, 1, num_online_cpus());
+NULL_PARAM(queue_mode, NULL_Q_BIO, NULL_Q_MQ);
+NULL_PARAM(gb, 1, INT_MAX);
+NULL_PARAM(bs, 512, 4096);
+NULL_PARAM(max_sectors, 1, INT_MAX);
+NULL_PARAM(irqmode, NULL_IRQ_NONE, NULL_IRQ_TIMER);
+NULL_PARAM(hw_qdepth, 1, INT_MAX);

That can be done in a single patch and is overall a lot less code.

-- 
Damien Le Moal
Western Digital Research




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux