]> sourceware.org Git - lvm2.git/commitdiff
Update lvm_vg_extend to do an implicit pvcreate on the device.
authorDave Wysochanski <dwysocha@redhat.com>
Sun, 26 Jul 2009 01:54:40 +0000 (01:54 +0000)
committerDave Wysochanski <dwysocha@redhat.com>
Sun, 26 Jul 2009 01:54:40 +0000 (01:54 +0000)
Although the tools do not currently do this, we update lvm_vg_extend
to do an implicit pvcreate on an uninitialized device.  The tools will
soon be refactored to do this as well, but more work is needed in the
tools.  For now we update lvm_vg_extend since this is the behavior
required by liblvm.
With this change, the simple liblvm unit test, test/api/vgtest.c
should pass whether or not the device is initialized.

Author: Dave Wysochanski <dwysocha@redhat.com>

liblvm/lvm.h
liblvm/lvm_vg.c

index c2157a87b80530c81e60c64125effb5ef23cbc73..48ec63766c7d80803c60b1af4d2cd6f75e3e7283 100644 (file)
@@ -146,6 +146,10 @@ vg_t *lvm_vg_create(lvm_t libh, const char *vg_name);
  * After successfully adding a device, use lvm_vg_write to commit the new VG
  * to disk.  Upon failure, retry the operation or release the VG handle with
  * lvm_vg_close.
+ * If the device is not initialized for LVM use, it will be initialized
+ * before adding to the VG.  Although some internal checks are done,
+ * the caller should be sure the device is not in use by other subsystems
+ * before calling lvm_vg_extend.
  *
  * \param   vg
  *          VG handle obtained from lvm_vg_create.
index 8f0cd5c8907b114918e60a493fb6b92e4b1d786e..0668aee555a7fe591ff8999f4d198b95698353ba 100644 (file)
@@ -12,9 +12,6 @@
  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <errno.h>
-#include <string.h>
-
 #include "lib.h"
 #include "lvm.h"
 #include "toolcontext.h"
 #include "locking.h"
 #include "lvm-string.h"
 #include "lvmcache.h"
+#include "metadata.h"
+
+#include <errno.h>
+#include <string.h>
 
 vg_t *lvm_vg_create(lvm_t libh, const char *vg_name)
 {
@@ -47,6 +48,14 @@ int lvm_vg_extend(vg_t *vg, const char *device)
                return 0;
        }
 
+       /* If device not initialized, pvcreate it */
+       if (!pv_by_path(vg->cmd, device) &&
+          (!pvcreate_single(vg->cmd, device, NULL))) {
+               log_error("Unable to initialize device for LVM use\n");
+               unlock_vg(vg->cmd, VG_ORPHANS);
+               return 0;
+       }
+
        if (!vg_extend(vg, 1, (char **) &device)) {
                unlock_vg(vg->cmd, VG_ORPHANS);
                return 0;
This page took 0.042353 seconds and 5 git commands to generate.