2020-04-08 16:20:33 +03:00
#!/usr/bin/env bash
# Copyright (C) 2020 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
# test foreing user of thin-pool
SKIP_WITH_LVMPOLLD = 1
. lib/inittest
cleanup_mounted_and_teardown( )
{
dmsetup remove $THIN || true
vgremove -ff $vg
aux teardown
}
#
# Main
#
aux have_thin 1 0 0 || skip
which mkfs.ext4 || skip
# Use our mkfs config file to get approximately same results
# TODO: maybe use it for all test via some 'prepare' function
export MKE2FS_CONFIG = " $TESTOLDPWD /lib/mke2fs.conf "
aux prepare_vg 2 64
# Create named pool only
lvcreate -L2 -T $vg /pool
POOL = " $vg -pool "
THIN = " ${ PREFIX } _thin "
# Foreing user is using own ioctl command to create thin devices
dmsetup message $POOL 0 "create_thin 0"
dmsetup message $POOL 0 "set_transaction_id 0 2"
# Once the transaction id has changed, lvm2 shall not be able to create thinLV
fail lvcreate -V10 $vg /pool
trap 'cleanup_mounted_and_teardown' EXIT
# 20M thin device
dmsetup create " $THIN " --table " 0 40960 thin $DM_DEV_DIR /mapper/ $POOL 0 "
mkfs.ext4 " $DM_DEV_DIR /mapper/ $THIN "
2020-05-15 17:56:40 +03:00
aux udev_wait
dmsetup remove " $THIN " || { sleep .5 ; dmsetup remove " $THIN " }
2020-04-08 16:20:33 +03:00
lvchange -an $vg /pool
# Repair thin-pool used by 'foreing' apps (setting their own tid)
lvconvert --repair $vg /pool 2>& 1 | tee out
not grep "Transaction id" out
lvchange -ay $vg /pool
dmsetup create " $THIN " --table " 0 40960 thin $DM_DEV_DIR /mapper/ $POOL 0 "
fsck -n " $DM_DEV_DIR /mapper/ $THIN "