> On Apr 17, 2018, at 8:25 AM, Stefan Hajnoczi <stefa...@redhat.com> wrote: > > Commit c1eef220c1760762753b602c382127bfccee226d ("vsock: always call > vsock_init_tables()") introduced a module_init() function without a > corresponding module_exit() function. > > Modules with an init function can only be removed if they also have an > exit function. Therefore the vsock module was considered "permanent" > and could not be removed. > > This patch adds an empty module_exit() function so that "rmmod vsock" > works. No explicit cleanup is required because: > > 1. Transports call vsock_core_exit() upon exit and cannot be removed > while sockets are still alive. > 2. vsock_diag.ko does not perform any action that requires cleanup by > vsock.ko. > > Reported-by: Xiumei Mu <x...@redhat.com> > Cc: Cong Wang <xiyou.wangc...@gmail.com> > Cc: Jorgen Hansen <jhan...@vmware.com> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > net/vmw_vsock/af_vsock.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c > index aac9b8f6552e..c1076c19b858 100644 > --- a/net/vmw_vsock/af_vsock.c > +++ b/net/vmw_vsock/af_vsock.c > @@ -2018,7 +2018,13 @@ const struct vsock_transport > *vsock_core_get_transport(void) > } > EXPORT_SYMBOL_GPL(vsock_core_get_transport); > > +static void __exit vsock_exit(void) > +{ > + /* Do nothing. This function makes this module removable. */ > +} > + > module_init(vsock_init_tables); > +module_exit(vsock_exit); > > MODULE_AUTHOR("VMware, Inc."); > MODULE_DESCRIPTION("VMware Virtual Socket Family"); > -- > 2.14.3 >
Looks good to me. Reviewed-by: Jorgen Hansen <jhan...@vmware.com>