public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
* LVM2/tools lvresize.c
@ 2012-04-12 15:11 agk
  0 siblings, 0 replies; 9+ messages in thread
From: agk @ 2012-04-12 15:11 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@sourceware.org	2012-04-12 15:11:21

Modified files:
	tools          : lvresize.c 

Log message:
	Remove 'up' from rounding message that sometimes rounds down.
	Detect reduction of 0 after rounding for stripes and avoid warning of potential data loss.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.154&r2=1.155

--- LVM2/tools/lvresize.c	2012/04/11 12:40:04	1.154
+++ LVM2/tools/lvresize.c	2012/04/12 15:11:21	1.155
@@ -454,6 +454,12 @@
 
 	alloc = (alloc_policy_t) arg_uint_value(cmd, alloc_ARG, lv->alloc);
 
+	/*
+	 * First adjust to an exact multiple of extent size.
+	 * When extending by a relative amount we round that amount up.
+	 * When reducing by a relative amount we remove at most that amount.
+	 * When changing to an absolute size, we round that size up.
+	 */
 	if (lp->size) {
 		if (lp->size % vg->extent_size) {
 			if (lp->sign == SIGN_MINUS)
@@ -462,7 +468,7 @@
 				lp->size += vg->extent_size -
 				    (lp->size % vg->extent_size);
 
-			log_print("Rounding up size to full physical extent %s",
+			log_print("Rounding size to boundary between physical extents: %s",
 				  display_size(cmd, lp->size));
 		}
 
@@ -714,6 +720,15 @@
 			return EINVALID_CMD_LINE;
 		}
 		lp->resize = LV_EXTEND;
+	} else if (lp->extents == lv->le_count) {
+		if (use_policy)
+			return ECMD_PROCESSED; /* Nothing to do. */
+		if (!lp->resizefs) {
+			log_error("New size (%d extents) matches existing size "
+				  "(%d extents)", lp->extents, lv->le_count);
+			return EINVALID_CMD_LINE;
+		}
+		lp->resize = LV_EXTEND;
 	}
 
 	if (lv_is_origin(lv)) {


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2012-04-11 12:30 zkabelac
  0 siblings, 0 replies; 9+ messages in thread
From: zkabelac @ 2012-04-11 12:30 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	zkabelac@sourceware.org	2012-04-11 12:30:49

Modified files:
	tools          : lvresize.c 

Log message:
	Move check for min strip size
	
	and remove few asigns that are not needed.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.151&r2=1.152

--- LVM2/tools/lvresize.c	2012/03/05 15:05:25	1.151
+++ LVM2/tools/lvresize.c	2012/04/11 12:30:48	1.152
@@ -367,12 +367,12 @@
 {
 	struct logical_volume *lv;
 	struct lvinfo info;
-	uint32_t stripesize_extents = 0;
-	uint32_t seg_stripes = 0, seg_stripesize = 0, seg_size = 0;
+	uint32_t stripesize_extents;
+	uint32_t seg_stripes = 0, seg_stripesize = 0, seg_size;
 	uint32_t seg_mirrors = 0;
-	uint32_t extents_used = 0;
+	uint32_t extents_used;
 	uint32_t size_rest;
-	uint32_t pv_extent_count = 0;
+	uint32_t pv_extent_count;
 	alloc_policy_t alloc;
 	struct logical_volume *lock_lv;
 	struct lv_list *lvl;
@@ -665,6 +665,12 @@
 	}
 
 	if (lp->stripes > 1) {
+		if (lp->stripe_size < STRIPE_SIZE_MIN) {
+			log_error("Invalid stripe size %s",
+				  display_size(cmd, (uint64_t) lp->stripe_size));
+			return EINVALID_CMD_LINE;
+		}
+
 		if (!(stripesize_extents = lp->stripe_size / vg->extent_size))
 			stripesize_extents = 1;
 
@@ -684,11 +690,6 @@
 			lp->extents = lp->extents - size_rest;
 		}
 
-		if (lp->stripe_size < STRIPE_SIZE_MIN) {
-			log_error("Invalid stripe size %s",
-				  display_size(cmd, (uint64_t) lp->stripe_size));
-			return EINVALID_CMD_LINE;
-		}
 	}
 
 	if (lp->extents < lv->le_count) {


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2011-11-08 12:19 zkabelac
  0 siblings, 0 replies; 9+ messages in thread
From: zkabelac @ 2011-11-08 12:19 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	zkabelac@sourceware.org	2011-11-08 12:19:53

Modified files:
	tools          : lvresize.c 

Log message:
	Thin ensure pool table is update after resize
	
	Always make sure table gets reloaded.
	For now activate and deactivate pool volume if it's not active.
	
	FIXME: we could do this only if we are sure some thin volume is alive.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.142&r2=1.143

--- LVM2/tools/lvresize.c	2011/11/07 10:58:13	1.142
+++ LVM2/tools/lvresize.c	2011/11/08 12:19:53	1.143
@@ -781,6 +781,20 @@
 
 	backup(vg);
 
+	/*
+	 * Update lvm pool metadata (drop messages) if the pool has been
+	 * resumed and do a pool active/deactivate in other case.
+	 *
+	 * Note: Active thin pool can be waiting for resize.
+	 *
+	 * FIXME: Activate only when thin volume is active
+	 */
+	if (lv_is_thin_pool(lv) &&
+	    !update_pool_lv(lv, !lv_is_active(lv))) {
+		stack;
+		return ECMD_FAILED;
+	}
+
 	log_print("Logical volume %s successfully resized", lp->lv_name);
 
 	if (lp->resizefs && (lp->resize == LV_EXTEND) &&


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2011-06-15 10:56 mbroz
  0 siblings, 0 replies; 9+ messages in thread
From: mbroz @ 2011-06-15 10:56 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	mbroz@sourceware.org	2011-06-15 10:56:52

Modified files:
	tools          : lvresize.c 

Log message:
	Fix lvreduce stripe rounding up from previous commit.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.132&r2=1.133

--- LVM2/tools/lvresize.c	2011/06/09 19:38:56	1.132
+++ LVM2/tools/lvresize.c	2011/06/15 10:56:52	1.133
@@ -609,8 +609,10 @@
 		if (size_rest && lp->resize == LV_REDUCE) {
 			log_print("Rounding size (%d extents) up to stripe "
 				  "boundary size for segment (%d extents)",
-				  lp->extents, lp->extents + size_rest);
-			lp->extents = lp->extents + size_rest;
+				  lp->extents, lp->extents - size_rest +
+				  (lp->stripes * stripesize_extents));
+			lp->extents = lp->extents - size_rest +
+				      (lp->stripes * stripesize_extents);
 		} else if (size_rest) {
 			log_print("Rounding size (%d extents) down to stripe "
 				  "boundary size for segment (%d extents)",


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2009-02-28 19:43 agk
  0 siblings, 0 replies; 9+ messages in thread
From: agk @ 2009-02-28 19:43 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@sourceware.org	2009-02-28 19:43:42

Modified files:
	tools          : lvresize.c 

Log message:
	.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.104&r2=1.105

--- LVM2/tools/lvresize.c	2009/02/28 00:54:07	1.104
+++ LVM2/tools/lvresize.c	2009/02/28 19:43:42	1.105
@@ -579,7 +579,7 @@
 	if ((lp->resizefs || (lp->resize == LV_REDUCE)) &&
 	    !_request_confirmation(cmd, vg, lv, lp)) {
 		stack;
-		// return ECMD_FAILED;
+		return ECMD_FAILED;
 	}
 
 	if (lp->resizefs) {


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2009-02-27 23:55 agk
  0 siblings, 0 replies; 9+ messages in thread
From: agk @ 2009-02-27 23:55 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@sourceware.org	2009-02-27 23:55:15

Modified files:
	tools          : lvresize.c 

Log message:
	.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.102&r2=1.103

--- LVM2/tools/lvresize.c	2009/02/27 23:40:12	1.102
+++ LVM2/tools/lvresize.c	2009/02/27 23:55:15	1.103
@@ -579,7 +579,7 @@
 	if ((lp->resizefs || (lp->resize == LV_REDUCE)) &&
 	    !_request_confirmation(cmd, vg, lv, lp)) {
 		stack;
-		// return ECMD_FAILED;
+		return ECMD_FAILED;
 	}
 
 	if (lp->resizefs) {


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2007-09-06 22:35 wysochanski
  0 siblings, 0 replies; 9+ messages in thread
From: wysochanski @ 2007-09-06 22:35 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski@sourceware.org	2007-09-06 22:35:01

Modified files:
	tools          : lvresize.c 

Log message:
	Fix last checkin

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.81&r2=1.82

--- LVM2/tools/lvresize.c	2007/09/06 21:08:16	1.81
+++ LVM2/tools/lvresize.c	2007/09/06 22:35:01	1.82
@@ -132,7 +132,6 @@
 }
 
 static int do_resizefs_reduce(struct cmd_context *cmd, struct volume_group *vg,
-			      struct logical_volume *lv,
 			      struct lvresize_params *lp)
 {
 	char lv_path[PATH_MAX];
@@ -552,7 +551,7 @@
 	}
 
 	if (lp->resizefs) {
-		if (!do_resizefs_reduce(cmd, vg, lv_path, lp))
+		if (!do_resizefs_reduce(cmd, vg, lp))
 		    return ECMD_FAILED;
 	}
 


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2007-09-06 21:08 wysochanski
  0 siblings, 0 replies; 9+ messages in thread
From: wysochanski @ 2007-09-06 21:08 UTC (permalink / raw)
  To: lvm-devel, lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski@sourceware.org	2007-09-06 21:08:16

Modified files:
	tools          : lvresize.c 

Log message:
	Fixup _lvresize error return codes and modularize function

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.80&r2=1.81

--- LVM2/tools/lvresize.c	2007/08/20 20:55:30	1.80
+++ LVM2/tools/lvresize.c	2007/09/06 21:08:16	1.81
@@ -46,6 +46,128 @@
 	char **argv;
 };
 
+static int validate_stripesize(struct cmd_context *cmd,
+			       struct volume_group *vg,
+			       struct lvresize_params *lp)
+{
+	if (arg_sign_value(cmd, stripesize_ARG, 0) == SIGN_MINUS) {
+		log_error("Stripesize may not be negative.");
+		return 0;
+	}
+
+	if (arg_uint_value(cmd, stripesize_ARG, 0) > STRIPE_SIZE_LIMIT) {
+		log_error("Stripe size cannot be larger than %s",
+			  display_size(cmd, (uint64_t) STRIPE_SIZE_LIMIT));
+		return 0;
+	}
+
+	if (!(vg->fid->fmt->features & FMT_SEGMENTS))
+		log_warn("Varied stripesize not supported. Ignoring.");
+	else if (arg_uint_value(cmd, stripesize_ARG, 0) > vg->extent_size) {
+		log_error("Reducing stripe size %s to maximum, "
+			  "physical extent size %s",
+			  display_size(cmd,
+				       (uint64_t) arg_uint_value(cmd, stripesize_ARG, 0) * 2),
+			  display_size(cmd, (uint64_t) vg->extent_size));
+		lp->stripe_size = vg->extent_size;
+	} else
+		lp->stripe_size = 2 * arg_uint_value(cmd,
+						     stripesize_ARG, 0);
+
+	if (lp->mirrors) {
+		log_error("Mirrors and striping cannot be combined yet.");
+		return 0;
+	}
+	if (lp->stripe_size & (lp->stripe_size - 1)) {
+		log_error("Stripe size must be power of 2");
+		return 0;
+	}
+
+	return 1;
+}
+
+static int confirm_resizefs_reduce(struct cmd_context *cmd,
+				   struct volume_group *vg,
+				   struct logical_volume *lv,
+				   struct lvresize_params *lp)
+{
+	struct lvinfo info;
+
+	memset(&info, 0, sizeof(info));
+
+	if (!lv_info(cmd, lv, &info, 1) && driver_version(NULL, 0)) {
+		log_error("lv_info failed: aborting");
+		return 0;
+	}
+
+	if (lp->resizefs && !info.exists) {
+		log_error("Logical volume %s must be activated "
+			  "before resizing filesystem", lp->lv_name);
+		return 0;
+	}
+
+	if (info.exists && !lp->resizefs && (lp->resize == LV_REDUCE)) {
+		log_warn("WARNING: Reducing active%s logical volume "
+			 "to %s", info.open_count ? " and open" : "",
+			 display_size(cmd, (uint64_t) lp->extents *
+				      vg->extent_size));
+
+		log_warn("THIS MAY DESTROY YOUR DATA "
+			 "(filesystem etc.)");
+
+		if (!arg_count(cmd, force_ARG)) {
+			if (yes_no_prompt("Do you really want to "
+					  "reduce %s? [y/n]: ",
+					  lp->lv_name) == 'n') {
+				log_print("Logical volume %s NOT "
+					  "reduced", lp->lv_name);
+				return 0;
+			}
+			if (sigint_caught())
+				return 0;
+		}
+	}
+
+	return 1;
+}
+
+static int do_resizefs_reduce(struct cmd_context *cmd, struct volume_group *vg,
+			      struct logical_volume *lv,
+			      struct lvresize_params *lp)
+{
+	char lv_path[PATH_MAX];
+	char size_buf[SIZE_BUF];
+
+	if (dm_snprintf(lv_path, PATH_MAX, "%s%s/%s", cmd->dev_dir,
+			lp->vg_name, lp->lv_name) < 0) {
+		log_error("Couldn't create LV path for %s",
+			  lp->lv_name);
+		return 0;
+	}
+
+	if (dm_snprintf(size_buf, SIZE_BUF, "%" PRIu64,
+			(uint64_t) lp->extents * vg->extent_size / 2) < 0) {
+		log_error("Couldn't generate new LV size string");
+		return 0;
+	}
+
+	if (!lp->nofsck) {
+		if (!exec_cmd("fsadm", "check", lv_path, NULL)) {
+			stack;
+			return 0;
+		}
+	}
+
+	if (lp->resize == LV_REDUCE) {
+		if (!exec_cmd("fsadm", "resize", lv_path, size_buf)) {
+			stack;
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
 static int _lvresize_params(struct cmd_context *cmd, int argc, char **argv,
 			    struct lvresize_params *lp)
 {
@@ -165,43 +287,13 @@
 			log_warn("Mirrors not supported. Ignoring.");
 		if (arg_sign_value(cmd, mirrors_ARG, 0) == SIGN_MINUS) {
 			log_error("Mirrors argument may not be negative");
-			return 0;
+			return EINVALID_CMD_LINE;
 		}
 	}
 
 	if (arg_count(cmd, stripesize_ARG)) {
-		if (arg_sign_value(cmd, stripesize_ARG, 0) == SIGN_MINUS) {
-			log_error("Stripesize may not be negative.");
-			return ECMD_FAILED;
-		}
-
-		if (arg_uint_value(cmd, stripesize_ARG, 0) > STRIPE_SIZE_LIMIT) {
-			log_error("Stripe size cannot be larger than %s",
-				  display_size(cmd, (uint64_t) STRIPE_SIZE_LIMIT));
-			return 0;
-		}
-
-		if (!(vg->fid->fmt->features & FMT_SEGMENTS))
-			log_warn("Varied stripesize not supported. Ignoring.");
-		else if (arg_uint_value(cmd, stripesize_ARG, 0) > vg->extent_size) {
-                	log_error("Reducing stripe size %s to maximum, "
-				  "physical extent size %s",
-				  display_size(cmd,
-					(uint64_t) arg_uint_value(cmd, stripesize_ARG, 0) * 2),
-	                          display_size(cmd, (uint64_t) vg->extent_size));
-                	lp->stripe_size = vg->extent_size;
-        	} else
-			lp->stripe_size = 2 * arg_uint_value(cmd,
-							     stripesize_ARG, 0);
-
-		if (lp->mirrors) {
-			log_error("Mirrors and striping cannot be combined yet.");
-			return ECMD_FAILED;
-		}
-		if (lp->stripe_size & (lp->stripe_size - 1)) {
-			log_error("Stripe size must be power of 2");
-			return 0;
-		}
+		if (!validate_stripesize(cmd, vg, lp))
+			return EINVALID_CMD_LINE;
 	}
 
 	lv = lvl->lv;
@@ -393,7 +485,7 @@
 		if (lp->stripe_size < STRIPE_SIZE_MIN) {
 			log_error("Invalid stripe size %s",
 				  display_size(cmd, (uint64_t) lp->stripe_size));
-			return 0;
+			return EINVALID_CMD_LINE;
 		}
 	}
 
@@ -455,70 +547,13 @@
 	}
 
 	if (lp->resize == LV_REDUCE || lp->resizefs) {
-		memset(&info, 0, sizeof(info));
-
-		if (!lv_info(cmd, lv, &info, 1) && driver_version(NULL, 0)) {
-			log_error("lv_info failed: aborting");
-			return ECMD_FAILED;
-		}
-
-		if (lp->resizefs && !info.exists) {
-			log_error("Logical volume %s must be activated "
-				  "before resizing filesystem", lp->lv_name);
+		if (!confirm_resizefs_reduce(cmd, vg, lv, lp))
 			return ECMD_FAILED;
-		}
-
-		if (info.exists && !lp->resizefs && (lp->resize == LV_REDUCE)) {
-			log_warn("WARNING: Reducing active%s logical volume "
-				  "to %s", info.open_count ? " and open" : "",
-				  display_size(cmd, (uint64_t) lp->extents *
-						    vg->extent_size));
-
-			log_warn("THIS MAY DESTROY YOUR DATA "
-				 "(filesystem etc.)");
-
-			if (!arg_count(cmd, force_ARG)) {
-				if (yes_no_prompt("Do you really want to "
-						  "reduce %s? [y/n]: ",
-						  lp->lv_name) == 'n') {
-					log_print("Logical volume %s NOT "
-						  "reduced", lp->lv_name);
-					return ECMD_FAILED;
-				}
-				if (sigint_caught())
-					return ECMD_FAILED;
-			}
-		}
 	}
 
 	if (lp->resizefs) {
-		if (dm_snprintf(lv_path, PATH_MAX, "%s%s/%s", cmd->dev_dir,
-				 lp->vg_name, lp->lv_name) < 0) {
-			log_error("Couldn't create LV path for %s",
-				  lp->lv_name);
-			return ECMD_FAILED;
-		}
-
-		if (dm_snprintf(size_buf, SIZE_BUF, "%" PRIu64,
-				 (uint64_t) lp->extents * vg->extent_size / 2)
-				 < 0) {
-			log_error("Couldn't generate new LV size string");
-			return ECMD_FAILED;
-		}
-
-		if (!lp->nofsck) {
-			if (!exec_cmd("fsadm", "check", lv_path, NULL)) {
-				stack;
-				return ECMD_FAILED;
-			}
-		}
-
-		if (lp->resize == LV_REDUCE) {
-			if (!exec_cmd("fsadm", "resize", lv_path, size_buf)) {
-				stack;
-				return ECMD_FAILED;
-			}
-		}
+		if (!do_resizefs_reduce(cmd, vg, lv_path, lp))
+		    return ECMD_FAILED;
 	}
 
 	if (!archive(vg)) {


^ permalink raw reply	[flat|nested] 9+ messages in thread
* LVM2/tools lvresize.c
@ 2005-06-03 22:26 agk
  0 siblings, 0 replies; 9+ messages in thread
From: agk @ 2005-06-03 22:26 UTC (permalink / raw)
  To: lvm2-cvs

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk@sourceware.org	2005-06-03 22:26:10

Modified files:
	tools          : lvresize.c 

Log message:
	prevent active mirror resize for now

Patches:
http://sources.redhat.com/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.63&r2=1.64


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-04-12 15:11 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-12 15:11 LVM2/tools lvresize.c agk
  -- strict thread matches above, loose matches on Subject: below --
2012-04-11 12:30 zkabelac
2011-11-08 12:19 zkabelac
2011-06-15 10:56 mbroz
2009-02-28 19:43 agk
2009-02-27 23:55 agk
2007-09-06 22:35 wysochanski
2007-09-06 21:08 wysochanski
2005-06-03 22:26 agk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).