Re: [PATCH v4 RFC 0/3] virtio: add 'device_lost' to virtio_device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Heinz Graalfs <graalfs@xxxxxxxxxxxxxxxxxx> writes:
> Hi, here is my v4 patch-set update to the v3 RFC submitted on Nov 27th. 
>
> When an active virtio block device is hot-unplugged from a KVM guest,
> 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. Additionally a potential hang situation can be avoided by not
> waiting for requests (e.g. in-flight requests) in blk_cleanup_queue() that
> will never complete.
>
> 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.


Hi Heinz,

        If you simply mark every virtqueue as broken when this
unexpected unplug happens, does that not Just Work?

I think I've asked this before...
Rusty.

>
> When an online channel device disappears on System z the kernel's CIO layer
> informs the driver (virtio_ccw) about the lost device.
>
> 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 passing on device loss information via the surprize_removal
> flag to the remove callback of the backend driver, can solve this task.
>
> v3->v4 changes:
>  - patch 1: solves some vcdev pointer handling issues in the virtio_ccw driver
>    (e.g. locked vcdev pointer reset/query; serialize remove()/set_offline()
>    callback processing).
>  - patch 2: introduces 'device_lost' atomic in virtio_device and use in
>    backend driver virtio_blk accordingly (original 3 patches merged).
>  - patch 3: the notify() callback is now serialized with remove()/set_offline()
>    callbacks. The notification is ignored if the vcdev pointer has been cleared
>    already (by remove() or set_offline()).
>
> v2->v3 changes:
>  - remove virtio_driver's notify callback (and appropriate code) introduced
>    in my v1 RFC
>  - introduce 'surprize_removal' in struct virtio_device
>  - change virtio_blk's remove callback to perform special actions when the
>    surprize_removal flag is set
>    - avoid final I/O by preventing further request queueing
>    - avoid hangs in blk_cleanup_queue() due to waits on 'in-flight' requests
>  - set surprize_removal in virtio_ccw's notify callback when a device is lost
>
> v1->v2 changes:
>  - add include of linux/notifier.h (I also added it to the 3rd patch)
>  - get queue lock in order to be able to use safe queue_flag_set() functions
>    in virtblk_notify() handler
>
>
> Heinz Graalfs (3):
>   virtio_ccw: fix vcdev pointer handling issues
>   virtio: introduce 'device_lost' flag in virtio_device
>   virtio_ccw: set 'device_lost' on CIO_GONE notification
>
>  drivers/block/virtio_blk.c    | 14 ++++++++++-
>  drivers/s390/kvm/virtio_ccw.c | 58 ++++++++++++++++++++++++++++++++++++-------
>  include/linux/virtio.h        |  2 ++
>  3 files changed, 64 insertions(+), 10 deletions(-)
>
> -- 
> 1.8.3.1
_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linuxfoundation.org/mailman/listinfo/virtualization




[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux