[libvirt] [PATCH] storage: Do not break the whole vol lookup process in the middle
Eric Blake
eblake at redhat.com
Fri Sep 23 15:52:54 UTC 2011
On 09/21/2011 04:36 AM, Osier Yang wrote:
> * src/storage/storage_driver.c: As virStorageVolLookupByPath lookups
> all the pool objs of the drivers, breaking when failing on getting
> the stable path of the pool will just breaks the lookup process, it
> can cause the API fails even if the vol exists indeed. It won't get
> any benifit. This patch is to fix it.
s/benifit/benefit/
> ---
> src/storage/storage_driver.c | 14 ++++++--------
> 1 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index c05b74e..8a3b5be 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -1247,14 +1247,13 @@ storageVolumeLookupByPath(virConnectPtr conn,
>
> stable_path = virStorageBackendStablePath(driver->pools.objs[i],
> cleanpath);
> - /*
> - * virStorageBackendStablePath already does
> - * virStorageReportError if it fails; we just need to keep
> - * propagating the return code
> - */
> if (stable_path == NULL) {
> - virStoragePoolObjUnlock(driver->pools.objs[i]);
> - goto cleanup;
> + /* Don't break the whole lookup process if fails on
s/if fails/if it fails/
> + * getting the stabe path for some of the pool.
s/stabe/stable/ s/pool./pools./
> + */
> + VIR_WARN("Failed to get stable path for pool '%s'",
> + driver->pools.objs[i]->def->name);
> + continue;
You still need to call virStoragePoolObjUnlock prior to continue,
otherwise you have a resource leak.
> }
>
> vol = virStorageVolDefFindByPath(driver->pools.objs[i],
> @@ -1274,7 +1273,6 @@ storageVolumeLookupByPath(virConnectPtr conn,
> virStorageReportError(VIR_ERR_NO_STORAGE_VOL,
> "%s", _("no storage vol with matching path"));
>
> -cleanup:
> VIR_FREE(cleanpath);
> storageDriverUnlock(driver);
> return ret;
I like the idea, but it would be worth seeing a v2.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list