On Mon, Oct 19, 2020 at 11:05 PM Michael S. Tsirkin <mst@xxxxxxxxxx> 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@xxxxxxxxxxxxx>
> ---
> 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
> --
> 2.25.1