[libvirt] [PATCH v3] qemu: Don't fail if the SCSI host device is shareable between domains
Osier Yang
jyang at redhat.com
Thu Jan 23 15:06:49 UTC 2014
On 23/01/14 23:04, Osier Yang wrote:
> It doesn't make sense to fail if the SCSI host device is specified
> as "shareable" explicitly between domains (NB, it works if and only
> if the device is specified as "shareable" for *all* domains,
> otherwise it fails).
>
> To fix the problem, this patch introduces an array for virSCSIDevice
> struct, which records all the names of domain which are using the
> device (note that the recorded domains must specifiy the device as
> shareable). And the change on the data struct brings on many
> subsequent changes in the code.
>
> Since prior to this patch, the "shareable" tag didn't work as expected,
> it actually work like "non-shareable". If there was a live domain using
> the SCSI device with "shareable" specified, then after upgrading
> (assuming the live domain keep running during upgrading) the older
> libvirt (without this patch) to newer libvirt (with this patch), it may
> cause some confusion when user tries to start later domains as
> "shareable". So this patch also added notes in formatdomain.html to
> declare the fact.
>
> * src/util/virscsi.h:
> - Remove virSCSIDeviceGetUsedBy
> - Change definition of virSCSIDeviceGetUsedBy and virSCSIDeviceListDel
> - Add virSCSIDeviceIsAvailable
>
> * src/util/virscsi.c:
> - struct virSCSIDevice: Change "used_by" to be an array; Add
> "n_used_by" as the array count
> - virSCSIDeviceGetUsedBy: Removed
> - virSCSIDeviceFree: frees the "used_by" array
> - virSCSIDeviceSetUsedBy: Copy the domain name to avoid potential
> memory corruption
> - virSCSIDeviceIsAvailable: New
> - virSCSIDeviceListDel: Change the logic, for device which is already
> in the list, just remove the corresponding entry in "used_by". And
> since it's only used in one place, we can safely removing the code
> to find out the dev in the list first.
> - Copyright updating
>
> * src/libvirt_private.sys:
> - virSCSIDeviceGetUsedBy: Remove
> - virSCSIDeviceIsAvailable: New
>
> * src/qemu/qemu_hostdev.c:
> - qemuUpdateActiveScsiHostdevs: Check if the device existing before
> adding it to the list;
> - qemuPrepareHostdevSCSIDevices: Error out if the not all domains
> use the device as "shareable"; Also don't try to add the device
> to the activeScsiHostdevs list if it already there; And make
> more sensible error w.r.t the current "shareable" value in
> driver->activeScsiHostdevs.
> - qemuDomainReAttachHostScsiDevices: Change the logic according
> to the changes on helpers.
> ---
> docs/formatdomain.html.in | 6 ++++
> src/libvirt_private.syms | 2 +-
> src/qemu/qemu_hostdev.c | 77 ++++++++++++++++++++++++++---------------------
> src/util/virscsi.c | 45 +++++++++++++++++++++------
> src/util/virscsi.h | 7 +++--
> 5 files changed, 90 insertions(+), 47 deletions(-)
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index ff50214..18bfad1 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -2798,6 +2798,12 @@
> between domains (assuming the hypervisor and OS support this).
> Only supported by SCSI host device.
> <span class="since">Since 1.0.6</span>
> + <p>
> + Note: though <code>shareable</shareable> was introduced
>
s/shareable/code/, :(
More information about the libvir-list
mailing list