From: "Michael S. Tsirkin" <mst@redhat.com>
To: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
Cc: borntraeger@de.ibm.com, virtualization@lists.linux-foundation.org
Subject: Re: [PATCH RFC 0/3] virtio: add new notify() callback to virtio_driver
Date: Thu, 21 Nov 2013 16:58:18 +0200 [thread overview]
Message-ID: <20131121145818.GA9188@redhat.com> (raw)
In-Reply-To: <528E1C27.4020603@linux.vnet.ibm.com>
On Thu, Nov 21, 2013 at 03:43:51PM +0100, Heinz Graalfs wrote:
> On 21/11/13 07:47, Michael S. Tsirkin wrote:
> >On Wed, Nov 20, 2013 at 04:22:00PM +0100, Heinz Graalfs wrote:
> >>Hi,
> >>
> >>when an active virtio block device is hot-unplugged from a KVM guest, running
> >>affected guest user applications are not aware of any errors that occur due
> >>to the lost device. This patch-set adds code to avoid further request queueing
> >>when a lost block device is detected, resulting in appropriate error info.
> >>
> >>On System z there exists no handshake mechanism between host and guest
> >>when a device is hot-unplugged. The device is removed and no further I/O
> >>is possible.
> >>
> >>When an online channel device disappears on System z the kernel's CIO layer
> >>informs the driver (virtio_ccw) about the lost device.
> >>
> >>It's just the block device drivers that care to provide a notify
> >>callback.
> >>
> >>Here are some more error details:
> >>
> >>For a particular block device virtio's request function virtblk_request()
> >>is called by the block layer to queue requests to be handled by the host.
> >>In case of a lost device requests can still be queued, but an appropriate
> >>subsequent host kick usually fails. This leads to situations where no error
> >>feedback is shown.
> >>
> >>In order to prevent request queueing for lost devices appropriate settings
> >>in the block layer should be made. Exploiting System z's CIO notify handler
> >>callback, and adding a corresponding new virtio_driver notify() handler to
> >>'inform' the block layer, solve this task.
> >>
> >>Patch 1 adds an optional notify() callback to virtio_driver.
> >>
> >>Patch 2 adds a new notify() callback for the virtio_blk driver. When called
> >>for a lost device settings are made to prevent future request queueing.
> >>
> >>Patch 3 modifies the CIO notify handler in virtio_ccw's transport layer to pass
> >>on the lost device info to virtio's backend driver virtio_blk.
> >
> >Question: I guess remove callback is invoked eventually?
> >Could you please clarify why isn't this sufficient?
> >
>
> yes, the remove callback is invoked lateron, and it could be done
> there. However, it should be done conditionally, and prior to
> invoking del_gendisk() (which triggers final I/O). We would still
> have the need for such notification information. The remove callback
> is also invoked when a device is set offline, and in that case we
> don't want a queue to reject further requests. The way it is done
> right doesn't affect the remove callback. The weird situation,
> however, is solved by the new notify callback.
> Doing it in blk_cleanup_queue() (also triggered from
> virtblk_remove()) is too late for this scenario of a lost device.
> One wouldn't see any errors, but experience a 'hang' due to
> inclomplete I/O. The invocation of virtblk_request() indirectly
> caused by del_gendisk() would accept requests, the subsequent host
> notification, however, would fail. (This is probably another
> 'window' that should be closed.)
I see. All this makes sense.
So it's really important that the event is sent
*before* device is removed.
Maybe it's a good idea to rename event GONE->GOING_AWAY ?
>
> >
> >
> >>Heinz Graalfs (3):
> >> virtio: add notify() callback to virtio_driver
> >> virtio_blk: add virtblk_notify() as virtio_driver's notify() callback
> >> virtio_ccw: invoke virtio_driver's notify() on CIO_GONE notification
> >>
> >> drivers/block/virtio_blk.c | 14 ++++++++++++++
> >> drivers/s390/kvm/virtio_ccw.c | 14 ++++++++++++--
> >> drivers/virtio/virtio.c | 8 ++++++++
> >> include/linux/virtio.h | 10 ++++++++++
> >> 4 files changed, 44 insertions(+), 2 deletions(-)
> >>
> >>--
> >>1.8.3.1
> >
next prev parent reply other threads:[~2013-11-21 14:58 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-20 15:22 [PATCH RFC 0/3] virtio: add new notify() callback to virtio_driver Heinz Graalfs
2013-11-20 15:22 ` [PATCH RFC 1/3] virtio: add " Heinz Graalfs
2013-11-21 1:30 ` Rusty Russell
2013-11-21 6:44 ` Michael S. Tsirkin
2013-11-20 15:22 ` [PATCH RFC 2/3] virtio_blk: add virtblk_notify() as virtio_driver's notify() callback Heinz Graalfs
2013-11-21 6:39 ` Michael S. Tsirkin
2013-11-21 6:41 ` Michael S. Tsirkin
2013-11-20 15:22 ` [PATCH RFC 3/3] virtio_ccw: invoke virtio_driver's notify() on CIO_GONE notification Heinz Graalfs
2013-11-21 6:47 ` [PATCH RFC 0/3] virtio: add new notify() callback to virtio_driver Michael S. Tsirkin
2013-11-21 14:43 ` Heinz Graalfs
2013-11-21 14:58 ` Michael S. Tsirkin [this message]
2013-11-21 17:18 ` Heinz Graalfs
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=20131121145818.GA9188@redhat.com \
--to=mst@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=graalfs@linux.vnet.ibm.com \
--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).