From 21a17f291c8e69f5b7b2835fdedad1dc3945c59d Mon Sep 17 00:00:00 2001 From: Petr Rockai Date: Wed, 13 Oct 2010 13:52:53 +0000 Subject: [PATCH] Give correct error message when creating a too-small snapshot (BZ 587063) --- lib/metadata/lv_manip.c | 5 +++++ test/t-lvcreate-small-snap.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 test/t-lvcreate-small-snap.sh diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 2bcfcc7e9..5044376eb 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -3123,6 +3123,11 @@ int lv_create_single(struct volume_group *vg, return 0; } + if (lp->snapshot && (lp->extents * vg->extent_size < 2 * lp->chunk_size)) { + log_error("Unable to create a snapshot smaller than 2 chunks."); + return 0; + } + if (!seg_is_virtual(lp) && vg->free_count < lp->extents) { log_error("Insufficient free extents (%u) in volume group %s: " diff --git a/test/t-lvcreate-small-snap.sh b/test/t-lvcreate-small-snap.sh new file mode 100644 index 000000000..789c09981 --- /dev/null +++ b/test/t-lvcreate-small-snap.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright (C) 2010 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 + +. ./test-utils.sh + +aux prepare_pvs 3 + +vgcreate -c n -s 1k $vg $devs + +lvcreate -n one -l 10 $vg +lvcreate -s -l 8 -n snapA $vg/one +lvcreate -s -c 4k -l 8 -n snapX1 $vg/one +lvcreate -s -c 8k -l 16 -n snapX2 $vg/one + +# Check that snapshots that are too small are caught with correct error. +not lvcreate -s -c 8k -l 8 -n snapX3 $vg/one 2>&1 | tee lvcreate.out +not grep "suspend origin one" lvcreate.out +grep "Unable to create a snapshot" lvcreate.out + +not lvcreate -s -l 4 -n snapB $vg/one 2>&1 | tee lvcreate.out +not grep "suspend origin one" lvcreate.out +grep "Unable to create a snapshot" lvcreate.out -- 2.43.5