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