[libvirt] [PATCH][1.2.10] Relax duplicate SCSI host pool checking

John Ferlan jferlan at redhat.com
Fri Oct 31 18:34:20 UTC 2014



On 10/31/2014 12:01 PM, Ján Tomko wrote:
> Since commit 3f99d64 no new scsi_host pools can be defined
> if one of the already defined scsi_host pools does not refer
> to an accessible scsi_host adapter.
> 
> Relax the check by skipping over these inaccessible pools
> when checking for duplicates. If both of them are defined by
> their parent, only compare their address and unique_id with
> the re-introduced matchSCSIAdapterParent function.
> ---
> This would be nice to get into 1.2.10, as the commit mentioned
> above has not yet been released.

I see no issue with that...

My only query/thought is whether this should be two patches?

#1 reintroduce match function
#2 adjust/fix second check

> 
>  src/conf/storage_conf.c | 35 ++++++++++++++++++++++++++++++-----
>  1 file changed, 30 insertions(+), 5 deletions(-)
> 

OK - so this makes sense.

Removal of match parent code was based mostly on the premise we have a
valid scsi_host data being looked at. I guess it seems odd to me someone
would go through the iterations necessary in order to define/create one
that wouldn't be checked to be working first before making their second
attempt. Nonetheless what you have works, so...

ACK

John
> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> index 19c452b..afd6cd4 100644
> --- a/src/conf/storage_conf.c
> +++ b/src/conf/storage_conf.c
> @@ -2094,6 +2094,28 @@ getSCSIHostNumber(virStoragePoolSourceAdapter adapter,
>      VIR_FREE(name);
>      return ret;
>  }
> +static bool
> +matchSCSIAdapterParent(virStoragePoolObjPtr pool,
> +                       virStoragePoolDefPtr def)
> +{
> +    virDevicePCIAddressPtr pooladdr =
> +        &pool->def->source.adapter.data.scsi_host.parentaddr;
> +    virDevicePCIAddressPtr defaddr =
> +        &def->source.adapter.data.scsi_host.parentaddr;
> +    int pool_unique_id =
> +        pool->def->source.adapter.data.scsi_host.unique_id;
> +    int def_unique_id =
> +        def->source.adapter.data.scsi_host.unique_id;
> +    if (pooladdr->domain == defaddr->domain &&
> +        pooladdr->bus == defaddr->bus &&
> +        pooladdr->slot == defaddr->slot &&
> +        pooladdr->function == defaddr->function &&
> +        pool_unique_id == def_unique_id) {
> +        return true;
> +    }
> +    return false;
> +}
> +
>  
>  int
>  virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
> @@ -2143,10 +2165,17 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
>                         VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST) {
>                  unsigned int pool_hostnum, def_hostnum;
>  
> +                if (pool->def->source.adapter.data.scsi_host.has_parent &&
> +                    def->source.adapter.data.scsi_host.has_parent &&
> +                    matchSCSIAdapterParent(pool, def)) {
> +                    matchpool = pool;
> +                    break;
> +                }
> +
>                  if (getSCSIHostNumber(pool->def->source.adapter,
>                                        &pool_hostnum) < 0 ||
>                      getSCSIHostNumber(def->source.adapter, &def_hostnum) < 0)
> -                    goto error;
> +                    break;
>                  if (pool_hostnum == def_hostnum)
>                      matchpool = pool;
>              }
> @@ -2188,10 +2217,6 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
>          ret = -1;
>      }
>      return ret;
> -
> - error:
> -    virStoragePoolObjUnlock(pool);
> -    return -1;
>  }
>  
>  void
> 




More information about the libvir-list mailing list