1f08c3bdfSopenharmony_ci#!/bin/sh
2f08c3bdfSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later
3f08c3bdfSopenharmony_ci# Copyright (c) 2020 SUSE LLC <mdoucha@suse.cz>
4f08c3bdfSopenharmony_ci#
5f08c3bdfSopenharmony_ci# Create and mount LVM volume groups for lvm.local runfile
6f08c3bdfSopenharmony_ci
7f08c3bdfSopenharmony_ciTST_TESTFUNC=prepare_lvm
8f08c3bdfSopenharmony_ciTST_NEEDS_ROOT=1
9f08c3bdfSopenharmony_ciTST_NEEDS_CMDS="mount pvcreate vgcreate lvcreate"
10f08c3bdfSopenharmony_ci
11f08c3bdfSopenharmony_ciLVM_DIR="${LVM_DIR:-/tmp}"
12f08c3bdfSopenharmony_ciLVM_TMPDIR="$LVM_DIR/ltp/growfiles"
13f08c3bdfSopenharmony_ciLVM_IMGDIR="$LVM_DIR/ltp/imgfiles"
14f08c3bdfSopenharmony_ci
15f08c3bdfSopenharmony_cierror_check()
16f08c3bdfSopenharmony_ci{
17f08c3bdfSopenharmony_ci	if [ $? -ne 0 ]; then
18f08c3bdfSopenharmony_ci		tst_brk TBROK "LVM setup failed"
19f08c3bdfSopenharmony_ci	fi
20f08c3bdfSopenharmony_ci}
21f08c3bdfSopenharmony_ci
22f08c3bdfSopenharmony_cicreate_volume()
23f08c3bdfSopenharmony_ci{
24f08c3bdfSopenharmony_ci	fsname=$2
25f08c3bdfSopenharmony_ci	ROD mkdir -p $fsname
26f08c3bdfSopenharmony_ci
27f08c3bdfSopenharmony_ci	# If the FS isn't supported, only create the mountpoint and exit
28f08c3bdfSopenharmony_ci	if ! tst_supported_fs $fsname; then
29f08c3bdfSopenharmony_ci		return
30f08c3bdfSopenharmony_ci	fi
31f08c3bdfSopenharmony_ci
32f08c3bdfSopenharmony_ci	vgname=$1
33f08c3bdfSopenharmony_ci	lvname="ltp_lv_$fsname"
34f08c3bdfSopenharmony_ci	lvdev="/dev/$vgname/$lvname"
35f08c3bdfSopenharmony_ci
36f08c3bdfSopenharmony_ci	ROD lvcreate -L 1G $vgname -n "$lvname"
37f08c3bdfSopenharmony_ci	tst_mkfs $fsname "$lvdev"
38f08c3bdfSopenharmony_ci	ROD mount "$lvdev" $fsname
39f08c3bdfSopenharmony_ci}
40f08c3bdfSopenharmony_ci
41f08c3bdfSopenharmony_ciprepare_mounts()
42f08c3bdfSopenharmony_ci{
43f08c3bdfSopenharmony_ci	FSNAME1=$1
44f08c3bdfSopenharmony_ci	FSNAME2=$2
45f08c3bdfSopenharmony_ci	shift 2
46f08c3bdfSopenharmony_ci	LVM_DEV1=`tst_device acquire 1040 "$LVM_IMGDIR/lvm_pv1.img"`
47f08c3bdfSopenharmony_ci	error_check
48f08c3bdfSopenharmony_ci	LVM_DEV2=`tst_device acquire 1040 "$LVM_IMGDIR/lvm_pv2.img"`
49f08c3bdfSopenharmony_ci	error_check
50f08c3bdfSopenharmony_ci
51f08c3bdfSopenharmony_ci	# DEVSIZE=($# * 1GB / 2) + 16MB. The extra 16MB is for LVM physical
52f08c3bdfSopenharmony_ci	# volume headers
53f08c3bdfSopenharmony_ci	DEVSIZE=$(( $# * 512 + 16 ))
54f08c3bdfSopenharmony_ci	LVM_DEV3=`tst_device acquire $DEVSIZE "$LVM_IMGDIR/lvm_pv3.img"`
55f08c3bdfSopenharmony_ci	error_check
56f08c3bdfSopenharmony_ci	LVM_DEV4=`tst_device acquire $DEVSIZE "$LVM_IMGDIR/lvm_pv4.img"`
57f08c3bdfSopenharmony_ci	error_check
58f08c3bdfSopenharmony_ci	ROD pvcreate $LVM_DEV1 $LVM_DEV2 $LVM_DEV3 $LVM_DEV4
59f08c3bdfSopenharmony_ci	ROD vgcreate ltp_test_vg1 $LVM_DEV1 $LVM_DEV2
60f08c3bdfSopenharmony_ci	ROD vgcreate ltp_test_vg2 $LVM_DEV3 $LVM_DEV4
61f08c3bdfSopenharmony_ci
62f08c3bdfSopenharmony_ci	for fsname in $FSNAME1 $FSNAME2; do
63f08c3bdfSopenharmony_ci		create_volume ltp_test_vg1 $fsname
64f08c3bdfSopenharmony_ci	done
65f08c3bdfSopenharmony_ci
66f08c3bdfSopenharmony_ci	for fsname in $@; do
67f08c3bdfSopenharmony_ci		create_volume ltp_test_vg2 $fsname
68f08c3bdfSopenharmony_ci	done
69f08c3bdfSopenharmony_ci}
70f08c3bdfSopenharmony_ci
71f08c3bdfSopenharmony_ciprepare_lvm()
72f08c3bdfSopenharmony_ci{
73f08c3bdfSopenharmony_ci	FS_LIST=$(tst_supported_fs -s tmpfs | sort -u)
74f08c3bdfSopenharmony_ci	ROD mkdir -p "$LVM_TMPDIR"
75f08c3bdfSopenharmony_ci	ROD mkdir -p "$LVM_IMGDIR"
76f08c3bdfSopenharmony_ci	chmod 777 "$LVM_TMPDIR"
77f08c3bdfSopenharmony_ci	cd "$LVM_TMPDIR"
78f08c3bdfSopenharmony_ci	error_check
79f08c3bdfSopenharmony_ci	prepare_mounts $FS_LIST
80f08c3bdfSopenharmony_ci	tst_res TPASS "LVM mounts are ready"
81f08c3bdfSopenharmony_ci}
82f08c3bdfSopenharmony_ci
83f08c3bdfSopenharmony_ci. tst_test.sh
84f08c3bdfSopenharmony_citst_run
85