[libvirt] [PATCH v2 01/10] conf: Introduce readonly to hostdev and change helper function

Osier Yang jyang at redhat.com
Wed Apr 3 03:37:41 UTC 2013


On 01/04/13 20:00, Han Cheng wrote:
> The only parameter in -drive affect scsi-generic is readonly. Introduce
> <readonly/> to <hostdev>.
> The helper function to look up disk controller model may be used by scsi
> hostdev. But it should be changed to use info.
>
> Signed-off-by: Han Cheng <hanc.fnst at cn.fujitsu.com>
> ---
>   docs/formatdomain.html.in     |    3 +++
>   docs/schemas/domaincommon.rng |    5 +++++
>   src/conf/domain_conf.c        |    6 +++---
>   src/conf/domain_conf.h        |    6 ++++--
>   src/libvirt_private.syms      |    2 +-
>   src/qemu/qemu_command.c       |    4 ++--
>   6 files changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index cf382e8..a6bacfa 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -2257,6 +2257,9 @@
>         <code>id</code> attribute that specifies the USB vendor and product id.
>         The ids can be given in decimal, hexadecimal (starting with 0x) or
>         octal (starting with 0) form.</dd>
> +      <dt><code>readonly</code></dt>
> +      <dd>Specifies that the device is readonly.
> +      <span class="since">Since 0.13.0</span> for SCSI devices.</dd>

Except the wrong version pointed out by Hu Tao.  How about:

<code>readonly</code>
<dd>Indicates the device is readonly, only valid for SCSI device.
<span class="since">Since 1.0.5</span>.
</dd>

>         <dt><code>boot</code></dt>
>         <dd>Specifies that the device is bootable. The <code>order</code>
>         attribute determines the order in which devices will be tried during
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 8d7e6db..ccf0913 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -2911,6 +2911,11 @@
>           <ref name="alias"/>
>         </optional>
>         <optional>
> +        <element name='readonly'>
> +          <empty/>
> +        </element>
> +      </optional>
> +      <optional>

Since the "readonly" is only valid for SCSI device. This patch should be 
either
merged into 3/10, or rebased after it. It should be grouped in 
"hostdevsubsysscsi",
to make sure it's only valid for SCSI device when doing RNG validation.

>           <ref name="deviceBoot"/>
>         </optional>
>         <optional>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index f3fca7f..d9d6b9f 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -3452,8 +3452,8 @@ error:
>   }
>   
>   int
> -virDomainDiskFindControllerModel(virDomainDefPtr def,
> -                                 virDomainDiskDefPtr disk,
> +virDomainDeviceFindControllerModel(virDomainDefPtr def,
> +                                 virDomainDeviceInfoPtr info,
>                                    int controllerType)
>   {
>       int model = -1;
> @@ -3461,7 +3461,7 @@ virDomainDiskFindControllerModel(virDomainDefPtr def,
>   
>       for (i = 0; i < def->ncontrollers; i++) {
>           if (def->controllers[i]->type == controllerType &&
> -            def->controllers[i]->idx == disk->info.addr.drive.controller)
> +            def->controllers[i]->idx == info->addr.drive.controller)
>               model = def->controllers[i]->model;
>       }
>   
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index edddf25..f8e3973 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -439,6 +439,8 @@ struct _virDomainHostdevDef {
>       } source;
>       virDomainHostdevOrigStates origstates;
>       virDomainDeviceInfoPtr info; /* Guest address */
> +    /* readonly is only used for scsi hostdev */
> +    unsigned int readonly;
>   };
>   
>   /* Two types of disk backends */
> @@ -1981,8 +1983,8 @@ void virDomainInputDefFree(virDomainInputDefPtr def);
>   void virDomainDiskDefFree(virDomainDiskDefPtr def);
>   void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
>   void virDomainDiskHostDefFree(virDomainDiskHostDefPtr def);
> -int virDomainDiskFindControllerModel(virDomainDefPtr def,
> -                                     virDomainDiskDefPtr disk,
> +int virDomainDeviceFindControllerModel(virDomainDefPtr def,
> +                                     virDomainDeviceInfoPtr info,
>                                        int controllerType);
>   virDomainDiskDefPtr virDomainDiskFindByBusAndDst(virDomainDefPtr def,
>                                                    int bus,
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 96eea0a..f2eefc3 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -128,6 +128,7 @@ virDomainDeviceAddressTypeToString;
>   virDomainDeviceDefCopy;
>   virDomainDeviceDefFree;
>   virDomainDeviceDefParse;
> +virDomainDeviceFindControllerModel;
>   virDomainDeviceInfoCopy;
>   virDomainDeviceInfoIterate;
>   virDomainDeviceTypeToString;
> @@ -145,7 +146,6 @@ virDomainDiskDeviceTypeToString;
>   virDomainDiskErrorPolicyTypeFromString;
>   virDomainDiskErrorPolicyTypeToString;
>   virDomainDiskFindByBusAndDst;
> -virDomainDiskFindControllerModel;
>   virDomainDiskGeometryTransTypeFromString;
>   virDomainDiskGeometryTransTypeToString;
>   virDomainDiskHostDefFree;
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index a0c278f..eac72c2 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -557,7 +557,7 @@ qemuAssignDeviceDiskAliasCustom(virDomainDefPtr def,
>       if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
>           if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
>               controllerModel =
> -                virDomainDiskFindControllerModel(def, disk,
> +                virDomainInfoFindControllerModel(def, &disk->info,
>                                                    VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
>   
>               if ((qemuSetScsiControllerModel(def, qemuCaps, &controllerModel)) < 0)
> @@ -3179,7 +3179,7 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
>           }
>   
>           controllerModel =
> -            virDomainDiskFindControllerModel(def, disk,
> +            virDomainInfoFindControllerModel(def, &disk->info,
>                                                VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
>           if ((qemuSetScsiControllerModel(def, qemuCaps, &controllerModel)) < 0)
>               goto error;




More information about the libvir-list mailing list