2017-07-02 22:38:32 +03:00
#!/usr/bin/env bash
2012-10-09 18:32:11 +04:00
2013-02-02 15:48:52 +04:00
# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
2012-10-09 18:32:11 +04:00
#
# 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,
2016-01-21 13:49:46 +03:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2012-10-09 18:32:11 +04:00
#
# test support of thin discards
#
2016-02-23 01:13:42 +03:00
SKIP_WITH_LVMLOCKD = 1
2015-10-27 17:10:06 +03:00
SKIP_WITH_LVMPOLLD = 1
2015-05-17 18:22:18 +03:00
export LVM_TEST_THIN_REPAIR_CMD = ${ LVM_TEST_THIN_REPAIR_CMD -/bin/false }
2014-06-06 19:40:04 +04:00
. lib/inittest
2012-10-09 18:32:11 +04:00
#
# Main
#
2012-10-10 02:20:22 +04:00
aux have_thin 1 1 0 || skip
2012-10-09 18:32:11 +04:00
2016-12-12 13:22:41 +03:00
aux prepare_vg 2 64
2012-10-09 18:32:11 +04:00
2016-01-14 18:54:12 +03:00
aux extend_filter_LVMTEST
2012-10-09 18:32:11 +04:00
# Create named pool only
lvcreate -l1 --discards ignore -T $vg /pool
check lv_field $vg /pool discards "ignore"
2016-01-14 18:54:12 +03:00
check lv_field $vg /pool kernel_discards "ignore"
2012-10-09 18:32:11 +04:00
lvcreate -l1 --discards nopassdown -T $vg /pool1
check lv_field $vg /pool1 discards "nopassdown"
2016-01-14 18:54:12 +03:00
check lv_field $vg /pool1 kernel_discards "nopassdown"
2012-10-09 18:32:11 +04:00
lvcreate -l1 --discards passdown -T $vg /pool2
check lv_field $vg /pool2 discards "passdown"
2016-01-14 18:54:12 +03:00
check lv_field $vg /pool2 discards "passdown"
2012-10-09 18:32:11 +04:00
lvchange --discards nopassdown $vg /pool2
2013-02-02 15:48:52 +04:00
lvcreate -V1M -n origin -T $vg /pool
lvcreate -s $vg /origin -n snap
# Cannot convert active nopassdown -> ignore
not lvchange --discards nopassdown $vg /pool
# Cannot convert active ignore -> passdown
2012-10-09 18:32:11 +04:00
not lvchange --discards passdown $vg /pool
2013-02-02 15:48:52 +04:00
# Cannot convert active nopassdown -> ignore
2012-10-09 18:32:11 +04:00
not lvchange --discards ignore $vg /pool1
2013-02-02 15:48:52 +04:00
# Deactivate pool only
2012-10-09 18:32:11 +04:00
lvchange -an $vg /pool $vg /pool1
2013-02-02 15:48:52 +04:00
# Cannot convert, since thin volumes are still active
not lvchange --discards passdown $vg /pool
# Deactive thin volumes
lvchange -an $vg /origin $vg /snap
2012-10-09 18:32:11 +04:00
lvchange --discards passdown $vg /pool
check lv_field $vg /pool discards "passdown"
2013-02-02 15:48:52 +04:00
2012-10-09 18:32:11 +04:00
lvchange --discards ignore $vg /pool1
check lv_field $vg /pool1 discards "ignore"
vgremove -ff $vg
2016-01-14 18:54:12 +03:00
# Create thin pool with discards set to "ignore".
# If we create a thin volume which we use for a PV
# which we use to create another thin pool on top
# with discards set to "passdown", the discards value
# in metadata is still "passdown", but because the
# device below does not support it, the kernel value
# of discards actually used will be "nopassdown".
# This is why we have "-o discards" and "-o kernel_discards".
vgcreate -s 1m ${ vg } _1 $( cat DEVICES)
lvcreate -l 10 -T ${ vg } _1/pool --discards ignore
lvcreate -V 9m -T ${ vg } _1/pool -n device_with_ignored_discards
vgcreate -s 1m ${ vg } _2 " $DM_DEV_DIR / ${ vg } _1/device_with_ignored_discards "
lvcreate -l 1 -T ${ vg } _2/pool --discards passdown
lvcreate -V 1 -T ${ vg } _2/pool
check lv_field ${ vg } _1/pool discards "ignore"
check lv_field ${ vg } _1/pool kernel_discards "ignore"
check lv_field ${ vg } _2/pool discards "passdown"
check lv_field ${ vg } _2/pool kernel_discards "nopassdown"
vgremove -ff ${ vg } _2
vgremove -ff ${ vg } _1