On Tue, 2017-01-03 at 15:51 +0200, Max Gurtovoy wrote: > From: Israel Rukshin <israelr@xxxxxxxxxxxx> > > After setting indirect_sg_entries module_param to huge value (e.g 500,000), > srp_alloc_req_data() fails to allocate indirect descriptors for the request > ring (kmalloc fails). This commit enforces the maximum value of indirect_sg_entries > to be SG_MAX_SEGMENTS as signified in module param description. > > Signed-off-by: Israel Rukshin <israelr@xxxxxxxxxxxx> > Signed-off-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> > --- > drivers/infiniband/ulp/srp/ib_srp.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c > index 0f67cf9..ccdd2c2 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -3676,6 +3676,7 @@ static struct srp_function_template ib_srp_transport_functions = { > static int __init srp_init_module(void) > { > int ret; > + unsigned int max_indirect_sg_entries = SG_MAX_SEGMENTS; > > if (srp_sg_tablesize) { > pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n"); > @@ -3699,6 +3700,12 @@ static int __init srp_init_module(void) > indirect_sg_entries = cmd_sg_entries; > } > > + if (indirect_sg_entries > max_indirect_sg_entries) { > + pr_warn("Clamping indirect_sg_entries to %u\n", > + max_indirect_sg_entries); > + indirect_sg_entries = max_indirect_sg_entries; > + } > + > srp_remove_wq = create_workqueue("srp_remove"); > if (!srp_remove_wq) { > ret = -ENOMEM; Hello Max, That's a good catch, but why has the max_indirect_sg_entries variable been introduced? Can it be left out? Thanks, Bart.��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f