[libvirt] [PATCH v2] logical: Check for existing vgname before building

Ján Tomko jtomko at redhat.com
Wed Nov 16 14:50:32 UTC 2016


On Wed, Nov 16, 2016 at 09:28:55AM -0500, John Ferlan wrote:
>https://bugzilla.redhat.com/show_bug.cgi?id=1373711
>
>Add a check for an existing volume group name before trying to build
>the volume group. Since the process of building a vg involves wiping
>the first 512 bytes and using pvcreate on each source device path before
>creating the vg - we could conceivably overwrite something that we
>shouldn't be.

That sounds like a bug in the pool build process. We should not be
overwriting the source devices without the OVERWRITE flag.

>Also, once a pv is part of a vg, the pvcreate would fail
>unless we chose to overwrite the volume.
>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>---
>
> Difference w/ v2 is that I'm taking a different approach - disallow the
> second pool-build since the vg already exists.  NB: libvirt has no API
> to extend an existing vg - that's left to an admin anyway.
>
> src/storage/storage_backend_logical.c | 22 +++++++++++++++++++++-
> 1 file changed, 21 insertions(+), 1 deletion(-)
>
>diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
>index ca05fe1..b241495 100644
>--- a/src/storage/storage_backend_logical.c
>+++ b/src/storage/storage_backend_logical.c
>@@ -682,14 +682,31 @@ virStorageBackendLogicalBuildPool(virConnectPtr conn ATTRIBUTE_UNUSED,
>                                   virStoragePoolObjPtr pool,
>                                   unsigned int flags)
> {
>-    virCommandPtr vgcmd;
>+    virCommandPtr vgcmd = NULL;
>     int fd;
>     char zeros[PV_BLANK_SECTOR_SIZE];
>     int ret = -1;
>     size_t i;
>+    virStoragePoolSourceList sourceList;
>
>     virCheckFlags(0, -1);
>
>+    /* Let's make sure the about to be created vg doesn't already exist */
>+    memset(&sourceList, 0, sizeof(sourceList));
>+    sourceList.type = VIR_STORAGE_POOL_LOGICAL;
>+
>+    if (virStorageBackendLogicalGetPoolSources(&sourceList) < 0)
>+        return -1;
>+

Rather than introducing one more place where we use this lovely
function, I'd prefer to stick to non-destructive steps and let the lvm
tools error out if the vg already exists.

Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161116/2aeed317/attachment-0001.sig>


More information about the libvir-list mailing list