[libvirt] [PATCH 4/6] conf: drop redundant parameter to chain lookup
John Ferlan
jferlan at redhat.com
Fri Apr 11 19:18:09 UTC 2014
On 04/11/2014 12:21 AM, Eric Blake wrote:
> The original chain lookup code had to pass in the starting name,
> because it was not available in the chain. But now that we have
> added fields to the struct, this parameter is redundant.
>
> * src/util/virstoragefile.h (virStorageFileChainLookup): Alter
> signature.
> * src/util/virstoragefile.c (virStorageFileChainLookup): Adjust
> handling of top of chain.
> * src/qemu/qemu_driver.c (qemuDomainBlockCommit): Adjust caller.
> * tests/virstoragetest.c (testStorageLookup, mymain): Likewise.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> src/qemu/qemu_driver.c | 3 +--
> src/util/virstoragefile.c | 18 +++++++--------
> src/util/virstoragefile.h | 1 -
> tests/virstoragetest.c | 57 ++++++++++++++++++++++++-----------------------
> 4 files changed, 39 insertions(+), 40 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index b8cfe27..7cb24e6 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -15343,7 +15343,6 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
> top_canon = disk->src.path;
> top_meta = disk->backingChain;
> } else if (!(top_canon = virStorageFileChainLookup(disk->backingChain,
> - disk->src.path,
> top, &top_meta,
> &top_parent))) {
> goto endjob;
> @@ -15356,7 +15355,7 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
> }
> if (!base && (flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW)) {
> base_canon = top_meta->backingStore;
> - } else if (!(base_canon = virStorageFileChainLookup(top_meta, top_canon,
> + } else if (!(base_canon = virStorageFileChainLookup(top_meta,
> base, NULL, NULL)))
> goto endjob;
> /* Note that this code exploits the fact that
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 66a6ab1..dcde9e5 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -1529,21 +1529,21 @@ int virStorageFileGetSCSIKey(const char *path,
> }
> #endif
>
> -/* Given a CHAIN that starts at the named file START, return a string
> - * pointing to either START or within CHAIN that gives the preferred
> - * name for the backing file NAME within that chain. Pass NULL for
> - * NAME to find the base of the chain. If META is not NULL, set *META
> - * to the point in the chain that describes NAME (or to NULL if the
> - * backing element is not a file). If PARENT is not NULL, set *PARENT
> - * to the preferred name of the parent (or to NULL if NAME matches
> - * START). Since the results point within CHAIN, they must not be
> +/* Given a CHAIN, look for the backing file NAME within the chain and
> + * return its canonical name. Pass NULL for NAME to find the base of
> + * the chain. If META is not NULL, set *META to the point in the
> + * chain that describes NAME (or to NULL if the backing element is not
> + * a file). If PARENT is not NULL, set *PARENT to the preferred name
> + * of the parent (or to NULL if NAME matches the start of the chain).
> + * Since the results point within CHAIN, they must not be
> * independently freed. Reports an error and returns NULL if NAME is
> * not found. */
> const char *
> -virStorageFileChainLookup(virStorageFileMetadataPtr chain, const char *start,
> +virStorageFileChainLookup(virStorageFileMetadataPtr chain,
> const char *name, virStorageFileMetadataPtr *meta,
> const char **parent)
> {
> + const char *start = chain->canonPath;
> virStorageFileMetadataPtr owner;
> const char *tmp;
>
> diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
> index c747f20..caf1d2f 100644
> --- a/src/util/virstoragefile.h
> +++ b/src/util/virstoragefile.h
> @@ -303,7 +303,6 @@ int virStorageFileChainGetBroken(virStorageFileMetadataPtr chain,
> char **broken_file);
>
> const char *virStorageFileChainLookup(virStorageFileMetadataPtr chain,
> - const char *start,
> const char *name,
> virStorageFileMetadataPtr *meta,
> const char **parent)
Expanded out a bit more shows:
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
not being changed - so on input previous chain and start could not be
NULL - now 'name' would be NONNULL which covers a previous concern, but
probably isn't correct...
> diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
> index 2f181a2..73bcb0b 100644
> --- a/tests/virstoragetest.c
> +++ b/tests/virstoragetest.c
> @@ -381,7 +381,6 @@ testStorageChain(const void *args)
> struct testLookupData
> {
> virStorageFileMetadataPtr chain;
> - const char *start;
> const char *name;
> const char *expResult;
> virStorageFileMetadataPtr expMeta;
> @@ -401,8 +400,8 @@ testStorageLookup(const void *args)
> * as the same string may be duplicated into more than one field,
> * we rely on STREQ rather than pointer equality. Test twice to
> * ensure optional parameters don't cause NULL deref. */
> - actualResult = virStorageFileChainLookup(data->chain, data->start,
> - data->name, NULL, NULL);
> + actualResult = virStorageFileChainLookup(data->chain, data->name,
> + NULL, NULL);
>
> if (!data->expResult) {
> if (!virGetLastError()) {
> @@ -423,9 +422,8 @@ testStorageLookup(const void *args)
> ret = -1;
> }
>
> - actualResult = virStorageFileChainLookup(data->chain, data->start,
> - data->name, &actualMeta,
> - &actualParent);
> + actualResult = virStorageFileChainLookup(data->chain, data->name,
> + &actualMeta, &actualParent);
> if (STRNEQ_NULLABLE(data->expResult, actualResult)) {
> fprintf(stderr, "result 2: expected %s, got %s\n",
> NULLSTR(data->expResult), NULLSTR(actualResult));
> @@ -452,7 +450,6 @@ mymain(void)
> virCommandPtr cmd = NULL;
> struct testChainData data;
> virStorageFileMetadataPtr chain = NULL;
> - const char *start = NULL;
>
> /* Prep some files with qemu-img; if that is not found on PATH, or
> * if it lacks support for qcow2 and qed, skip this test. */
> @@ -847,8 +844,7 @@ mymain(void)
> if (virCommandRun(cmd, NULL) < 0)
> ret = -1;
>
> - /* Test behavior of chain lookups, absolute backing */
> - start = "wrap";
> + /* Test behavior of chain lookups, absolute backing from relative start */
> chain = virStorageFileGetMetadata("wrap", VIR_STORAGE_FILE_QCOW2,
> -1, -1, false);
> if (!chain)
> @@ -856,7 +852,7 @@ mymain(void)
>
> #define TEST_LOOKUP(id, name, result, meta, parent) \
> do { \
> - struct testLookupData data2 = { chain, start, name, \
> + struct testLookupData data2 = { chain, name, \
> result, meta, parent, }; \
> if (virtTestRun("Chain lookup " #id, \
> testStorageLookup, &data2) < 0) \
> @@ -864,10 +860,12 @@ mymain(void)
> } while (0)
>
> TEST_LOOKUP(0, "bogus", NULL, NULL, NULL);
> - TEST_LOOKUP(1, "wrap", start, chain, NULL);
> - TEST_LOOKUP(2, abswrap, start, chain, NULL);
> - TEST_LOOKUP(3, "qcow2", chain->backingStore, chain->backingMeta, start);
> - TEST_LOOKUP(4, absqcow2, chain->backingStore, chain->backingMeta, start);
> + TEST_LOOKUP(1, "wrap", chain->canonPath, chain, NULL);
> + TEST_LOOKUP(2, abswrap, chain->canonPath, chain, NULL);
> + TEST_LOOKUP(3, "qcow2", chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> + TEST_LOOKUP(4, absqcow2, chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> TEST_LOOKUP(5, "raw", chain->backingMeta->backingStore,
> chain->backingMeta->backingMeta, chain->backingStore);
> TEST_LOOKUP(6, absraw, chain->backingMeta->backingStore,
> @@ -888,8 +886,7 @@ mymain(void)
> if (virCommandRun(cmd, NULL) < 0)
> ret = -1;
>
> - /* Test behavior of chain lookups, relative backing */
> - start = abswrap;
> + /* Test behavior of chain lookups, relative backing from absolute start */
> virStorageFileFreeMetadata(chain);
> chain = virStorageFileGetMetadata(abswrap, VIR_STORAGE_FILE_QCOW2,
> -1, -1, false);
> @@ -897,10 +894,12 @@ mymain(void)
> return EXIT_FAILURE;
>
> TEST_LOOKUP(8, "bogus", NULL, NULL, NULL);
> - TEST_LOOKUP(9, "wrap", start, chain, NULL);
> - TEST_LOOKUP(10, abswrap, start, chain, NULL);
> - TEST_LOOKUP(11, "qcow2", chain->backingStore, chain->backingMeta, start);
> - TEST_LOOKUP(12, absqcow2, chain->backingStore, chain->backingMeta, start);
> + TEST_LOOKUP(9, "wrap", chain->canonPath, chain, NULL);
> + TEST_LOOKUP(10, abswrap, chain->canonPath, chain, NULL);
> + TEST_LOOKUP(11, "qcow2", chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> + TEST_LOOKUP(12, absqcow2, chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> TEST_LOOKUP(13, "raw", chain->backingMeta->backingStore,
> chain->backingMeta->backingMeta, chain->backingStore);
> TEST_LOOKUP(14, absraw, chain->backingMeta->backingStore,
> @@ -916,20 +915,22 @@ mymain(void)
> ret = -1;
>
> /* Test behavior of chain lookups, relative backing */
> - start = "sub/link2";
> virStorageFileFreeMetadata(chain);
> - chain = virStorageFileGetMetadata(start, VIR_STORAGE_FILE_QCOW2,
> + chain = virStorageFileGetMetadata("sub/link2", VIR_STORAGE_FILE_QCOW2,
> -1, -1, false);
> if (!chain)
> return EXIT_FAILURE;
>
> TEST_LOOKUP(16, "bogus", NULL, NULL, NULL);
> - TEST_LOOKUP(17, "sub/link2", start, chain, NULL);
> - TEST_LOOKUP(18, "wrap", start, chain, NULL);
> - TEST_LOOKUP(19, abswrap, start, chain, NULL);
> - TEST_LOOKUP(20, "../qcow2", chain->backingStore, chain->backingMeta, start);
> - TEST_LOOKUP(21, "qcow2", chain->backingStore, chain->backingMeta, start);
> - TEST_LOOKUP(22, absqcow2, chain->backingStore, chain->backingMeta, start);
> + TEST_LOOKUP(17, "sub/link2", chain->canonPath, chain, NULL);
> + TEST_LOOKUP(18, "wrap", chain->canonPath, chain, NULL);
> + TEST_LOOKUP(19, abswrap, chain->canonPath, chain, NULL);
> + TEST_LOOKUP(20, "../qcow2", chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> + TEST_LOOKUP(21, "qcow2", chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> + TEST_LOOKUP(22, absqcow2, chain->backingStore, chain->backingMeta,
> + chain->canonPath);
> TEST_LOOKUP(23, "raw", chain->backingMeta->backingStore,
> chain->backingMeta->backingMeta, chain->backingStore);
> TEST_LOOKUP(24, absraw, chain->backingMeta->backingStore,
>
ACK - just remove the NONNULL(2) it seems.
John
More information about the libvir-list
mailing list