> -----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