All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: weiping zhang <zwp10758@gmail.com>
Cc: virtualization@lists.linux-foundation.org, mst@redhat.com
Subject: Re: [PATCH] virtio: release virtio index when fail to device_register
Date: Wed, 29 Nov 2017 10:50:44 +0100	[thread overview]
Message-ID: <20171129105044.3a4b0ab3.cohuck@redhat.com> (raw)
In-Reply-To: <20171129012301.GA6637@localhost.didichuxing.com>

On Wed, 29 Nov 2017 09:23:01 +0800
weiping zhang <zwp10758@gmail.com> wrote:

> index can be reused by other virtio device.
> 
> Signed-off-by: weiping zhang <zhangweiping@didichuxing.com>

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

> ---
>  drivers/virtio/virtio.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
> index 48230a5..bf7ff39 100644
> --- a/drivers/virtio/virtio.c
> +++ b/drivers/virtio/virtio.c
> @@ -333,6 +333,8 @@ int register_virtio_device(struct virtio_device *dev)
>  	/* device_register() causes the bus infrastructure to look for a
>  	 * matching driver. */
>  	err = device_register(&dev->dev);
> +	if (err)
> +		ida_simple_remove(&virtio_index_ida, dev->index);
>  out:
>  	if (err)
>  		virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);

I think your patch is correct (giving up the index if we failed to
register), but this made me look at our error handling if a virtio
device failed to register.

We hold an extra reference to the struct device, even after a failed
register, and it is the responsibility of the caller to give up that
reference once no longer needed. As callers toregister_virtio_device()
embed the struct virtio_device, it needs to be their responsibility.
Looking at the existing callers,

- ccw does a put_device
- pci, mmio and remoteproc do nothing, causing a leak
- vop does a free on the embedding structure, which is a big no-no

Thoughts?

  reply	other threads:[~2017-11-29  9:50 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-29  1:23 [PATCH] virtio: release virtio index when fail to device_register weiping zhang
2017-11-29  9:50 ` Cornelia Huck [this message]
2017-12-01 16:55   ` weiping zhang
2017-12-01 17:30     ` weiping zhang
2017-12-04  9:38     ` Cornelia Huck
2017-12-05  1:30       ` weiping zhang
2017-11-29 13:55 ` Michael S. Tsirkin
2017-11-29 13:55 ` Michael S. Tsirkin
  -- strict thread matches above, loose matches on Subject: below --
2017-11-28 15:43 weiping zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171129105044.3a4b0ab3.cohuck@redhat.com \
    --to=cohuck@redhat.com \
    --cc=mst@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=zwp10758@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.