[lvm-devel] [PATCH 1/4] Remove READ_REQUIRE_RESIZEABLE from vgextend by moving check inside vg_extend.

Dave Wysochanski dwysocha at redhat.com
Mon Jul 13 07:09:48 UTC 2009


Move the check for the RESIZEABLE flag inside the vg_extend function.
When we consolidated the vg locking, reading, and status flag checking,
we tied the check for the RESIZEABLE flag to the vg_read() call.  The problem
with this is you cannot know what other APIs the application my or may not
call after a vg_read() call.  Thus the READ_REQUIRE_RESIZEABLE flag is not
really ideal - ideally we should be checking for this flag on a specific
operation, not inside the vg_read() call.  This patch moves one check inside
the library.

Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
 lib/metadata/metadata.c |    3 +++
 tools/vgextend.c        |    3 +--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 2d6cb14..5206258 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -439,6 +439,9 @@ int vg_extend(struct volume_group *vg, int pv_count, char **pv_names)
 	struct physical_volume *pv;
 	struct cmd_context *cmd = vg->cmd;
 
+	if (_vg_bad_status_bits(vg, RESIZEABLE_VG))
+		return 0;
+
 	if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) {
 		log_error("Can't get lock for orphan PVs");
 		return 0;
diff --git a/tools/vgextend.c b/tools/vgextend.c
index 728d9f4..1dfbc11 100644
--- a/tools/vgextend.c
+++ b/tools/vgextend.c
@@ -37,8 +37,7 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
 	argv++;
 
 	log_verbose("Checking for volume group \"%s\"", vg_name);
-	vg = vg_read_for_update(cmd, vg_name, NULL,
-				READ_REQUIRE_RESIZEABLE);
+	vg = vg_read_for_update(cmd, vg_name, NULL, 0);
 	if (vg_read_error(vg)) {
 		vg_release(vg);
 		return ECMD_FAILED;
-- 
1.6.0.6




More information about the lvm-devel mailing list