From: Amit Shah <amit.shah@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: stable@vger.kernel.org,
Virtualization List <virtualization@lists.linux-foundation.org>
Subject: Re: [PATCH 04/10] virtio: console: return -ENODEV on all read operations after unplug
Date: Fri, 19 Jul 2013 11:15:12 +0530 [thread overview]
Message-ID: <20130719054512.GG3087@amit-x200.redhat.com> (raw)
In-Reply-To: <51E8C9A5.2070309@redhat.com>
On (Fri) 19 Jul 2013 [13:07:49], Jason Wang wrote:
> On 07/19/2013 04:16 AM, Amit Shah wrote:
> > If a port gets unplugged while a user is blocked on read(), -ENODEV is
> > returned. However, subsequent read()s returned 0, indicating there's no
> > host-side connection (but not indicating the device went away).
> >
> > This also happened when a port was unplugged and the user didn't have
> > any blocking operation pending. If the user didn't monitor the SIGIO
> > signal, they won't have a chance to find out if the port went away.
> >
> > Fix by returning -ENODEV on all read()s after the port gets unplugged.
> > write() already behaves this way.
> >
> > CC: <stable@vger.kernel.org>
> > Signed-off-by: Amit Shah <amit.shah@redhat.com>
> > ---
> > drivers/char/virtio_console.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
> > index 6bf0df3..a39702a 100644
> > --- a/drivers/char/virtio_console.c
> > +++ b/drivers/char/virtio_console.c
> > @@ -749,6 +749,10 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
> >
> > port = filp->private_data;
> >
> > + /* Port is hot-unplugged. */
> > + if (!port->guest_connected)
> > + return -ENODEV;
> > +
>
> What if the port is hot-unplugged after this check? Should we serialize
> the hot plug with inbuf_lock here?
If that happens, port_has_data() returns false, and the later
functions return appropriately, as unplug_port() clears out all the
data.
However, I spotted a couple of things that need fixing:
1. In the condition you describe above, port_has_data will return
false, and host_connected will be false as well, and fops_read() will
return 0 instead of -ENODEV once. Subsequent reads will return
-ENODEV.
2. get_inbuf(), which is called by port_has_data() accesses the vqs
even if the port is unplugged. The vqs are still available, and won't
have data in them (since the port is unplugged), but it's best to not
rely on such behaviour. For the next merge window, I'll add extra
state, port_(un)plugged to track this instead of abusing
guest_connected.
That also simplifies the path for later if we get vq hot-plug as well.
I think the current code will behave satisfactorily for now; what do
you think?
Amit
next prev parent reply other threads:[~2013-07-19 5:45 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-18 20:16 [PATCH 00/10] virtio: console: fixes for races with port unplug Amit Shah
2013-07-18 20:16 ` [PATCH 01/10] virtio: console: fix race with port unplug and open/close Amit Shah
2013-07-18 20:16 ` [PATCH 02/10] virtio: console: fix race in port_fops_open() and port unplug Amit Shah
2013-07-18 20:16 ` [PATCH 03/10] virtio: console: clean up port data immediately at time of unplug Amit Shah
2013-07-18 20:16 ` [PATCH 04/10] virtio: console: return -ENODEV on all read operations after unplug Amit Shah
2013-07-18 20:16 ` [PATCH 05/10] virtio: console: update private_data in struct file only on successful open Amit Shah
2013-07-18 20:16 ` [PATCH 06/10] virtio: console: fix race in port_fops_poll() and port unplug Amit Shah
2013-07-19 7:03 ` Jason Wang
2013-07-19 7:48 ` Amit Shah
2013-07-19 10:17 ` Jason Wang
2013-07-19 10:29 ` Amit Shah
2013-07-22 5:45 ` Rusty Russell
2013-07-23 3:01 ` Jason Wang
2013-07-23 5:26 ` Rusty Russell
2013-07-23 7:20 ` Jason Wang
2013-07-23 8:08 ` Amit Shah
2013-07-18 20:16 ` [PATCH 07/10] virtio: console: fix raising SIGIO after " Amit Shah
2013-07-18 20:16 ` [PATCH 08/10] virtio: console: add locks around buffer removal in port unplug path Amit Shah
2013-07-22 5:56 ` Rusty Russell
2013-07-23 8:24 ` Amit Shah
2013-07-24 1:49 ` Rusty Russell
2013-07-24 7:24 ` Amit Shah
2013-07-18 20:16 ` [PATCH 09/10] virtio: console: add locking " Amit Shah
2013-07-18 20:16 ` [PATCH 10/10] virtio: console: fix locking around send_sigio_to_port() Amit Shah
[not found] ` <fe68b08508c638c6edc4ca2883249a29fdc8fbec.1374177234.git.amit.shah@redhat.com>
2013-07-19 3:21 ` [PATCH 03/10] virtio: console: clean up port data immediately at time of unplug Jason Wang
2013-07-19 5:02 ` Amit Shah
2013-07-19 5:11 ` Jason Wang
[not found] ` <51E8CA9A.6070803@redhat.com>
2013-07-19 5:26 ` Amit Shah
2013-07-19 5:03 ` [PATCH 00/10] virtio: console: fixes for races with port unplug Amit Shah
[not found] ` <39ab201027a58e792724172f1f559fe837e89556.1374177234.git.amit.shah@redhat.com>
2013-07-19 5:07 ` [PATCH 04/10] virtio: console: return -ENODEV on all read operations after unplug Jason Wang
2013-07-19 5:45 ` Amit Shah [this message]
2013-07-19 7:00 ` Jason Wang
[not found] ` <a012f8e8c562c84c2302e57e5360291ef7d4ff21.1374177234.git.amit.shah@redhat.com>
2013-07-22 5:37 ` [PATCH 05/10] virtio: console: update private_data in struct file only on successful open Rusty Russell
[not found] ` <87ip03b1e7.fsf@rustcorp.com.au>
2013-07-23 8:18 ` Amit Shah
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=20130719054512.GG3087@amit-x200.redhat.com \
--to=amit.shah@redhat.com \
--cc=jasowang@redhat.com \
--cc=stable@vger.kernel.org \
--cc=virtualization@lists.linux-foundation.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).