On Mon, Oct 19, 2020 at 11:47 PM Michael S. Tsirkin <mst@redhat.com> wrote:
On Mon, Oct 19, 2020 at 11:44:36PM +0800, 谢永吉 wrote:
>
>
> On Mon, Oct 19, 2020 at 11:05 PM Michael S. Tsirkin <mst@redhat.com> wrote:
>
>     On Mon, Oct 19, 2020 at 10:56:22PM +0800, Xie Yongji wrote:
>     > The module should not be unloaded if any vduse device exists.
>     > So increase the module's reference count when creating vduse
>     > device. And the reference count is kept until the device is
>     > destroyed.
>     >
>     > Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
>     > ---
>     >  drivers/vdpa/vdpa_user/vduse_dev.c | 2 ++
>     >  1 file changed, 2 insertions(+)
>     >
>     > diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/
>     vduse_dev.c
>     > index 6787ba66725c..f04aa02de8c1 100644
>     > --- a/drivers/vdpa/vdpa_user/vduse_dev.c
>     > +++ b/drivers/vdpa/vdpa_user/vduse_dev.c
>     > @@ -887,6 +887,7 @@ static int vduse_destroy_dev(u32 id)
>     >       kfree(dev->vqs);
>     >       vduse_iova_domain_destroy(dev->domain);
>     >       vduse_dev_destroy(dev);
>     > +     module_put(THIS_MODULE);
>     > 
>     >       return 0;
>     >  }
>     > @@ -931,6 +932,7 @@ static int vduse_create_dev(struct vduse_dev_config
>     *config)
>     > 
>     >       dev->connected = true;
>     >       list_add(&dev->list, &vduse_devs);
>     > +     __module_get(THIS_MODULE);
>     > 
>     >       return fd;
>     >  err_fd:
>
>     This kind of thing is usually an indicator of a bug. E.g.
>     if the refcount drops to 0 on module_put(THIS_MODULE) it
>     will be unloaded and the following return will not run.
>
>
>
> Should this happen?  The refcount should be only decreased to 0 after the
> misc_device is closed?
>
> Thanks,
> Yongji
>

OTOH if it never drops to 0 anyway then why do you need to increase it?


To prevent unloading the module in the case that the device is created, but no user process using it (e.g. the user process crashed). 

Thanks,
Yongji

>
>
>     > --
>     > 2.25.1
>
>