RE: [PATCH rdma-next 5/9] RDMA/core: Restrict sysfs entries view to init_net

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

 




> -----Original Message-----
> From: Jason Gunthorpe <jgg@xxxxxxxx>
> Sent: Thursday, November 22, 2018 3:12 PM
> To: Leon Romanovsky <leon@xxxxxxxxxx>
> Cc: Doug Ledford <dledford@xxxxxxxxxx>; Leon Romanovsky
> <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux-rdma@xxxxxxxxxxxxxxx>;
> Daniel Jurgens <danielj@xxxxxxxxxxxx>; Parav Pandit
> <parav@xxxxxxxxxxxx>
> Subject: Re: [PATCH rdma-next 5/9] RDMA/core: Restrict sysfs entries view to
> init_net
> 
> On Wed, Nov 21, 2018 at 10:44:57AM +0200, Leon Romanovsky wrote:
> > From: Parav Pandit <parav@xxxxxxxxxxxx>
> >
> > This is a preparation patch to provide isolation of rdma device in a
> > network namespace.
> > As first step, make rdma device visible only in init net namespace.
> > Subsequent patch will enable rdma device visibility back in multiple
> > net namespaces using compat ib_core_device device/sysfs tree.
> >
> > Given that ib subsystem depends on net stack, it needs to be
> > initialized after netdev stack and since it support devices, it needs
> > to be initialized before device subsystem; therefore, change initcall
> > sequence to fs_initcall, so that when ib_core is compiled in kernel
> > image, right init sequence is followed.
> >
> > Signed-off-by: Parav Pandit <parav@xxxxxxxxxxxx>
> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> > drivers/infiniband/core/device.c | 18 ++++++++++++++----
> >  1 file changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/infiniband/core/device.c
> > b/drivers/infiniband/core/device.c
> > index 1dc8a5726d33..d70f2afb7e41 100644
> > +++ b/drivers/infiniband/core/device.c
> > @@ -265,10 +265,17 @@ static int ib_device_uevent(struct device *device,
> >  	return 0;
> >  }
> >
> > +static const void *net_namespace(struct device *d) {
> > +	return &init_net;
> > +}
> > +
> >  static struct class ib_class = {
> > -	.name    = "infiniband",
> > -	.dev_release = ib_device_release,
> > -	.dev_uevent = ib_device_uevent,
> > +	.name		= "infiniband",
> > +	.dev_release	= ib_device_release,
> > +	.dev_uevent	= ib_device_uevent,
> > +	.ns_type	= &net_ns_type_operations,
> > +	.namespace	= net_namespace,
> >  };
> 
> and lets not reformat code just to add horizonal whitespace please.
>
I see. 4 out of the 5 fields of structure follows right alignment, but keep old one as is?
But ok.
 
> >  static void rdma_init_coredev(struct ib_core_device *coredev, @@
> > -1350,5 +1357,8 @@ static void __exit ib_core_cleanup(void)
> >
> >  MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4);
> >
> > -subsys_initcall(ib_core_init);
> > +/* ib core relies on netdev stack to first registers
> > +net_ns_type_operations
> > + * ns kobject type before ib_core initialization.
> 
> 'first register'
> 
Will fix this.

> > +fs_initcall(ib_core_init);
> 
> Really? So very strange.
>
Yes. when module is compile as in-built to kernel, init sequence needs first initialize the net's init function first.
Otherwise ib_core_init gets called and accesses uninitialized net_ns_operations.
This is similar to 80211 net/wireless/core.c
 
> Jason




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux