[libvirt] [PATCH 2/3] nodedev: Introduce virNodeDeviceObjGetNames
Michal Privoznik
mprivozn at redhat.com
Mon Apr 10 11:14:36 UTC 2017
On 04/06/2017 01:31 PM, John Ferlan wrote:
> Unify the *ListDevice API into virnodedeviceobj.c from node_device_driver
> and test_driver. The only real difference between the two is that the test
> driver doesn't call the aclfilter API. The name of the new API follows that
> of other drivers to "GetNames".
>
> NB: Change some variable names to match what they really are - consistency
> with other drivers. Also added a clear of the input names.
>
> This also allows virNodeDeviceObjHasCap to be static to virnodedeviceobj
>
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> src/conf/virnodedeviceobj.c | 36 +++++++++++++++++++++++++++++++++++-
> src/conf/virnodedeviceobj.h | 12 ++++++++----
> src/libvirt_private.syms | 2 +-
> src/node_device/node_device_driver.c | 34 ++++++++++------------------------
> src/test/test_driver.c | 27 ++++++---------------------
> 5 files changed, 60 insertions(+), 51 deletions(-)
>
> diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
> index f0c20c2..5a8dfe7 100644
> --- a/src/conf/virnodedeviceobj.c
> +++ b/src/conf/virnodedeviceobj.c
> @@ -33,7 +33,7 @@
> VIR_LOG_INIT("conf.virnodedeviceobj");
>
>
> -int
> +static int
> virNodeDeviceObjHasCap(const virNodeDeviceObj *dev,
> const char *cap)
> {
> @@ -496,6 +496,40 @@ virNodeDeviceObjNumOfDevices(virNodeDeviceObjListPtr devs,
> }
>
>
> +int
> +virNodeDeviceObjGetNames(virNodeDeviceObjListPtr devs,
> + virConnectPtr conn,
> + virNodeDeviceObjListFilter aclfilter,
> + const char *cap,
> + char **const names,
> + int maxnames)
> +{
> + int nnames = 0;
> + size_t i;
> +
> + for (i = 0; i < devs->count && nnames < maxnames; i++) {
> + virNodeDeviceObjPtr obj = devs->objs[i];
> + virNodeDeviceObjLock(obj);
> + if (aclfilter && aclfilter(conn, obj->def) &&
> + (!cap || virNodeDeviceObjHasCap(obj, cap))) {
> + if (VIR_STRDUP(names[nnames++], obj->def->name) < 0) {
> + virNodeDeviceObjUnlock(obj);
> + goto failure;
> + }
> + }
> + virNodeDeviceObjUnlock(obj);
> + }
> +
> + return nnames;
> +
> + failure:
> + while (--nnames >= 0)
> + VIR_FREE(names[nnames]);
> + memset(names, 0, maxnames * sizeof(*names));
Like you've said in our discussion to early series, this is no longer here.
> + return -1;
> +}
> +
> +
> #define MATCH(FLAG) ((flags & (VIR_CONNECT_LIST_NODE_DEVICES_CAP_ ## FLAG)) && \
> virNodeDeviceCapMatch(devobj, VIR_NODE_DEV_CAP_ ## FLAG))
> static bool
> diff --git a/src/conf/virnodedeviceobj.h b/src/conf/virnodedeviceobj.h
> index 7d303a0..0acd8ce 100644
> --- a/src/conf/virnodedeviceobj.h
> +++ b/src/conf/virnodedeviceobj.h
> @@ -40,10 +40,6 @@ struct _virNodeDeviceDriverState {
> };
>
>
> -int
> -virNodeDeviceObjHasCap(const virNodeDeviceObj *dev,
> - const char *cap);
> -
> virNodeDeviceObjPtr
> virNodeDeviceObjFindByName(virNodeDeviceObjListPtr devs,
> const char *name);
> @@ -89,6 +85,14 @@ virNodeDeviceObjNumOfDevices(virNodeDeviceObjListPtr devs,
> virNodeDeviceObjListFilter aclfilter);
>
> int
> +virNodeDeviceObjGetNames(virNodeDeviceObjListPtr devs,
> + virConnectPtr conn,
> + virNodeDeviceObjListFilter aclfilter,
> + const char *cap,
> + char **const names,
> + int maxnames);
> +
> +int
> virNodeDeviceObjListExport(virConnectPtr conn,
> virNodeDeviceObjList devobjs,
> virNodeDevicePtr **devices,
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 104ed88..5df6a5d 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -946,8 +946,8 @@ virInterfaceObjUnlock;
> virNodeDeviceObjAssignDef;
> virNodeDeviceObjFindByName;
> virNodeDeviceObjFindBySysfsPath;
> +virNodeDeviceObjGetNames;
> virNodeDeviceObjGetParentHost;
> -virNodeDeviceObjHasCap;
> virNodeDeviceObjListExport;
> virNodeDeviceObjListFree;
> virNodeDeviceObjLock;
> diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
> index f90b168..e850a22 100644
> --- a/src/node_device/node_device_driver.c
> +++ b/src/node_device/node_device_driver.c
> @@ -174,14 +174,17 @@ nodeNumOfDevices(virConnectPtr conn,
> return ndevs;
> }
>
> +
> int
> nodeListDevices(virConnectPtr conn,
> const char *cap,
> - char **const names, int maxnames,
> + char **const names,
> + int maxnames,
> unsigned int flags)
> {
> - int ndevs = 0;
> - size_t i;
> + int nnames;
> +
> + memset(names, 0, maxnames * sizeof(*names));
Nor this.
>
> if (virNodeListDevicesEnsureACL(conn) < 0)
> return -1;
Michal
More information about the libvir-list
mailing list