1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-03 17:47:44 +03:00

When resizing LVs, always round in the safe direction, regardless of whether we

were called as lvresize or lvreduce.
This commit is contained in:
Petr Rockai 2011-09-15 18:51:11 +00:00
parent 34d290b424
commit a9f4775dc3
2 changed files with 27 additions and 1 deletions

25
test/t-lvresize-rounding.sh Executable file
View File

@ -0,0 +1,25 @@
# Copyright (C) 2007-2008 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
. lib/test
aux prepare_vg 2
lvcreate -l 10 -n lv -i2 $vg
lvextend -l +1 $vg/lv 2>&1 | tee log
grep 'down to stripe' log
lvresize -l +1 $vg/lv 2>&1 | tee log
grep 'down to stripe' log
lvreduce -f -l -1 $vg/lv 2>&1 | tee log
grep 'up to stripe' log
lvresize -f -l -1 $vg/lv 2>&1 | tee log
grep 'up to stripe' log

View File

@ -606,7 +606,8 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg,
stripesize_extents = 1; stripesize_extents = 1;
size_rest = seg_size % (lp->stripes * stripesize_extents); size_rest = seg_size % (lp->stripes * stripesize_extents);
if (size_rest && lp->resize == LV_REDUCE) { /* Round toward the original size. */
if (size_rest && lp->extents < lv->le_count) {
log_print("Rounding size (%d extents) up to stripe " log_print("Rounding size (%d extents) up to stripe "
"boundary size for segment (%d extents)", "boundary size for segment (%d extents)",
lp->extents, lp->extents - size_rest + lp->extents, lp->extents - size_rest +