main - tests: skip this testing without newer blkid
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=bc28082b990bf752a2c...
Commit: bc28082b990bf752a2ce6ffa13aff9452c655ab8
Parent: d418fc14f48ba8feb3f5c561f5626a673aef4863
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed May 10 11:45:50 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed May 10 16:19:46 2023 +0200
tests: skip this testing without newer blkid
Testing xfs --fs functionality needs new blkid.
---
test/shell/lvresize-xfs.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/test/shell/lvresize-xfs.sh b/test/shell/lvresize-xfs.sh
index 0a3b89012..7f3193941 100644
--- a/test/shell/lvresize-xfs.sh
+++ b/test/shell/lvresize-xfs.sh
@@ -45,6 +45,11 @@ mkdir -p "$mount_dir_space"
lvcreate -n $lv -L 300M $vg
mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+
+# --fs tests require a libblkid version that shows FSLASTBLOCK
+# so exit 0 test here, if the feature is not present
+blkid -p "$DM_DEV_DIR/$vg/$lv" | grep FSLASTBLOCK || skip
+
df --output=size "$mount_dir" |tee df1
dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
lvextend -L+20M $vg/$lv
12 months
main - cov: hide some false positives
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=d418fc14f48ba8feb3f...
Commit: d418fc14f48ba8feb3f5c561f5626a673aef4863
Parent: cc7c41abbdb51a1e6c60c4a79aa56fe40ab7937a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed May 10 13:01:37 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed May 10 16:19:46 2023 +0200
cov: hide some false positives
Hide some false positives.
Note: there must not a be blank line after coverity hiding comment.
---
daemons/dmeventd/dmeventd.c | 2 ++
daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c | 1 +
device_mapper/libdm-file.c | 1 -
libdm/dm-tools/dmsetup.c | 1 +
libdm/libdm-file.c | 1 -
tools/toollib.c | 2 +-
6 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index d89ab4af8..490768b63 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -987,6 +987,7 @@ static void _monitor_unregister(void *arg)
DEBUGLOG("Unregistering monitor for %s.", thread->device.name);
_unregister_for_timeout(thread);
+ /* coverity[missing_lock] no missing lock here */
if ((thread->status != DM_THREAD_REGISTERING) &&
!_do_unregister_device(thread))
log_error("%s: %s unregister failed.", __func__,
@@ -1969,6 +1970,7 @@ static void _daemonize(void)
(void) close(fd);
}
+ /* coverity[leaked_handle] dont't care */
if ((open("/dev/null", O_RDONLY) < 0) ||
(open("/dev/null", O_WRONLY) < 0) ||
(open("/dev/null", O_WRONLY) < 0))
diff --git a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
index 56498170f..cddf6cee8 100644
--- a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
+++ b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
@@ -123,6 +123,7 @@ struct dm_pool *dmeventd_lvm2_pool(void)
int dmeventd_lvm2_run(const char *cmdline)
{
+ /* coverity[missing_lock] no locking for run part */
return (lvm2_run(_lvm_handle, cmdline) == LVM2_COMMAND_SUCCEEDED);
}
diff --git a/device_mapper/libdm-file.c b/device_mapper/libdm-file.c
index 74d9968df..9361379a4 100644
--- a/device_mapper/libdm-file.c
+++ b/device_mapper/libdm-file.c
@@ -223,7 +223,6 @@ retry_fcntl:
}
/* coverity[leaked_handle] intentional leak of fd handle here */
-
return 1;
fail_close_unlink:
diff --git a/libdm/dm-tools/dmsetup.c b/libdm/dm-tools/dmsetup.c
index ea03d66c8..5e485af33 100644
--- a/libdm/dm-tools/dmsetup.c
+++ b/libdm/dm-tools/dmsetup.c
@@ -899,6 +899,7 @@ static int _display_info_cols(struct dm_task *dmt, struct dm_info *info)
goto_out;
if (_selection_cmd && selected) {
device_name = (char*) dm_task_get_name(dmt);
+ /* coverity[overrun-buffer-val] _setgeometry never called from this place */
if (!_selection_cmd->fn(_selection_cmd, NULL, 1, &device_name, NULL, 1))
goto_out;
}
diff --git a/libdm/libdm-file.c b/libdm/libdm-file.c
index 2e5f14f6f..292b56ce7 100644
--- a/libdm/libdm-file.c
+++ b/libdm/libdm-file.c
@@ -222,7 +222,6 @@ retry_fcntl:
}
/* coverity[leaked_handle] intentional leak of fd handle here */
-
return 1;
fail_close_unlink:
diff --git a/tools/toollib.c b/tools/toollib.c
index c2d93aaf9..6b590189b 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -88,6 +88,7 @@ int become_daemon(struct cmd_context *cmd, int skip_lvm)
_exit(ECMD_FAILED);
}
+ /* coverity[leaked_handle] don't care */
if ((dup2(null_fd, STDIN_FILENO) < 0) || /* reopen stdin */
(dup2(null_fd, STDOUT_FILENO) < 0) || /* reopen stdout */
(dup2(null_fd, STDERR_FILENO) < 0)) { /* reopen stderr */
@@ -113,7 +114,6 @@ int become_daemon(struct cmd_context *cmd, int skip_lvm)
}
/* coverity[leaked_handle] null_fd does not leak here */
-
return 1;
}
12 months
main - cov: remove unneeded header file inclusion
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=cc7c41abbdb51a1e6c6...
Commit: cc7c41abbdb51a1e6c60c4a79aa56fe40ab7937a
Parent: 7b52a663a6436581cfacd9212929db551a00920f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed May 10 12:55:38 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed May 10 15:27:48 2023 +0200
cov: remove unneeded header file inclusion
---
lib/label/label.c | 1 -
tools/pvscan.c | 1 -
2 files changed, 2 deletions(-)
diff --git a/lib/label/label.c b/lib/label/label.c
index 330089f1a..4b1362cf2 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -27,7 +27,6 @@
#include "lib/format_text/layout.h"
#include "lib/device/device_id.h"
#include "lib/device/online.h"
-#include "lib/filters/filter.h"
#include <sys/stat.h>
#include <fcntl.h>
diff --git a/tools/pvscan.c b/tools/pvscan.c
index 8f51a0b42..058e8b658 100644
--- a/tools/pvscan.c
+++ b/tools/pvscan.c
@@ -19,7 +19,6 @@
#include "lib/metadata/metadata.h"
#include "lib/label/hints.h"
#include "lib/device/online.h"
-#include "lib/filters/filter.h"
#include <dirent.h>
12 months
main - cov: validate dev_get_primary_dev result
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7b52a663a6436581cfa...
Commit: 7b52a663a6436581cfacd9212929db551a00920f
Parent: 0cc5c2203b72e84b12cc93f2f73fb679f3f7ae09
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed May 10 13:28:38 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed May 10 15:27:48 2023 +0200
cov: validate dev_get_primary_dev result
Make sure primary_dev is defined when using it.
---
lib/device/dev-mpath.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/device/dev-mpath.c b/lib/device/dev-mpath.c
index 5433b64e1..e6fc63afd 100644
--- a/lib/device/dev-mpath.c
+++ b/lib/device/dev-mpath.c
@@ -688,7 +688,8 @@ int dev_is_mpath_component(struct cmd_context *cmd, struct device *dev, dev_t *h
* primary_result 2: dev is a partition, primary_dev is the whole device
* primary_result 1: dev is a whole device
*/
- primary_result = dev_get_primary_dev(dt, dev, &primary_dev);
+ if (!(primary_result = dev_get_primary_dev(dt, dev, &primary_dev)))
+ return_0;
if (_dev_is_mpath_component_sysfs(cmd, dev, primary_result, primary_dev, holder_devno) == 1)
goto found;
12 months
main - tests: needs to be exported for tracing
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=0cc5c2203b72e84b12c...
Commit: 0cc5c2203b72e84b12cc93f2f73fb679f3f7ae09
Parent: 7267322fc19a6e09d6949058ee0efdb107e7ef81
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat May 6 22:39:16 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:43:22 2023 +0200
tests: needs to be exported for tracing
---
test/shell/lvresize-rounding.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/shell/lvresize-rounding.sh b/test/shell/lvresize-rounding.sh
index c2251eb06..52bedb4e8 100644
--- a/test/shell/lvresize-rounding.sh
+++ b/test/shell/lvresize-rounding.sh
@@ -36,7 +36,7 @@ lvresize -l+64 -i3 -I128 $vg/$lv1
vgremove -f $vg
# 15 extents
-LVM_TEST_AUX_TRACE=yes
+export LVM_TEST_AUX_TRACE=yes
aux prepare_vg 3 22
unset LVM_TEST_AUX_TRACE
1 year
main - tests: adapt for xfs 300M min size
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7267322fc19a6e09d69...
Commit: 7267322fc19a6e09d6949058ee0efdb107e7ef81
Parent: 4af8063c963f0610761d9cecbd6ed23b52f77256
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat May 6 20:11:32 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:43:22 2023 +0200
tests: adapt for xfs 300M min size
Some test still were missed to be converted for XFS 300M min size.
---
test/shell/fsadm-crypt-fsresize.sh | 31 +++++++++++++++-------------
test/shell/lvresize-fs-crypt.sh | 42 +++++++++++++++-----------------------
2 files changed, 34 insertions(+), 39 deletions(-)
diff --git a/test/shell/fsadm-crypt-fsresize.sh b/test/shell/fsadm-crypt-fsresize.sh
index 4ad2ab980..b2847928f 100644
--- a/test/shell/fsadm-crypt-fsresize.sh
+++ b/test/shell/fsadm-crypt-fsresize.sh
@@ -20,7 +20,7 @@ export LVM_TEST_PREFER_BRD=0
. lib/inittest
-aux prepare_vg 1 300
+aux prepare_vg 1 400
# Tests require a libblkid version that shows FSLASTBLOCK
which mkfs.ext4 || skip
@@ -209,8 +209,8 @@ check_missing cryptsetup || skip
vgchange -s 128k
lvcreate -n $lv1 -L25M $vg
-lvcreate -n ${lv1}bar -L35M $vg
-lvcreate -n ${lv1}plain -L35M $vg
+lvcreate -n ${lv1}bar -L335M $vg
+lvcreate -n ${lv1}plain -L335M $vg
create_crypt_device
trap 'cleanup_mounted_and_teardown' EXIT
@@ -275,9 +275,9 @@ test_ext3_small_shrink() {
}
test_xfs_resize() {
- mkfs.xfs -l internal,size=1536b -f "$3"
+ mkfs.xfs -f "$3"
- fsadm --lvresize resize $1 30M
+ fsadm --lvresize resize $1 330M
# Fails - not enough space for 4M fs
lvresize -L+10M -y --fs resize $1
not lvreduce -L10M --fs resize $1
@@ -290,7 +290,7 @@ test_xfs_resize() {
}
test_xfs_small_shrink() {
- mkfs.xfs -l internal,size=1536b -f "$3"
+ mkfs.xfs -f "$3"
not lvresize -L-1 --fs resize $1
fscheck_xfs "$3"
@@ -354,7 +354,7 @@ test_ext3_inactive() {
test_xfs_inactive() {
crypt_open "$2" $PWD2 "$4"
- mkfs.xfs -l internal,size=1536b -f "$3"
+ mkfs.xfs -f "$3"
crypt_close "$4"
not fsadm --lvresize resize $1 30M
@@ -435,7 +435,7 @@ test_ext3_plain() {
}
test_xfs_plain() {
- mkfs.xfs -l internal,size=1536b -f "$3"
+ mkfs.xfs -f "$3"
not fsadm --lvresize resize $1 30M
not lvresize -L+10M --fs resize $1
@@ -443,7 +443,7 @@ test_xfs_plain() {
fscheck_xfs "$3"
lvresize -f -L+10M $1
- fsadm --cryptresize resize $3 40M
+ fsadm --cryptresize resize $3 345M
# no shrink support in xfs
not fsadm --cryptresize resize $3 35M
fscheck_xfs "$3"
@@ -455,7 +455,7 @@ test_xfs_plain() {
crypt_open_plain "$2" $PWD3 "$4"
fscheck_xfs "$3"
- lvresize -f -L35M $1
+ lvresize -f -L320M $1
}
test_reiserfs_plain() {
@@ -501,7 +501,7 @@ test_ext3_detached() {
}
test_xfs_detached() {
- mkfs.xfs -l internal,size=1536b -f "$3"
+ mkfs.xfs -f "$3"
not fsadm --lvresize resize $1 30M
not lvresize -L+10M --fs resize $1
@@ -569,8 +569,11 @@ if check_missing ext3; then
fi
if check_missing xfs; then
+ lvresize -r -y -L310M $vg_lv
+ cryptsetup resize $CRYPT_NAME
+
test_xfs_resize "$vg_lv" "$dev_vg_lv" "$CRYPT_DEV"
- lvresize --fs ignore -y -L25M $vg_lv
+ lvresize --fs ignore -y -L325M $vg_lv
cryptsetup resize $CRYPT_NAME
test_xfs_inactive "$vg_lv2" "$dev_vg_lv2" "$CRYPT_DEV2" "$CRYPT_NAME2"
@@ -579,10 +582,10 @@ if check_missing xfs; then
test_xfs_plain "$vg_lv3" "$dev_vg_lv3" "$CRYPT_DEV_PLAIN" "$CRYPT_NAME_PLAIN"
crypt_close "$CRYPT_NAME_PLAIN"
- lvresize --fs ignore -y -L100M $vg_lv
+ lvresize --fs ignore -y -L310M $vg_lv
cryptsetup resize $CRYPT_NAME
test_xfs_small_shrink "$vg_lv" "$dev_vg_lv" "$CRYPT_DEV"
- lvresize --fs ignore -y -L25M $vg_lv
+ lvresize --fs ignore -y -L325M $vg_lv
cryptsetup resize $CRYPT_NAME
if [ -z "$SKIP_DETACHED" ]; then
diff --git a/test/shell/lvresize-fs-crypt.sh b/test/shell/lvresize-fs-crypt.sh
index 4bef771dc..7a73e108b 100644
--- a/test/shell/lvresize-fs-crypt.sh
+++ b/test/shell/lvresize-fs-crypt.sh
@@ -23,8 +23,7 @@ which mkfs.xfs || skip
lvcreate -n $lv1 -L 300 $vg
mkfs.xfs -f "$DM_DEV_DIR/$vg/$lv1"
blkid -p "$DM_DEV_DIR/$vg/$lv1" | grep FSLASTBLOCK || skip
-lvchange -an $vg
-lvremove $vg/$lv1
+lvremove -f $vg/$lv1
mount_dir="mnt_lvresize_cr"
mkdir -p "$mount_dir"
@@ -38,7 +37,7 @@ echo 93R4P4pIqAH8 | cryptsetup luksFormat -i1 --type luks1 "$DM_DEV_DIR/$vg/$lv"
echo 93R4P4pIqAH8 | cryptsetup luksOpen "$DM_DEV_DIR/$vg/$lv" $cr
mkfs.ext4 /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
lvextend -L+200M --fs resize $vg/$lv
check lv_field $vg/$lv lv_size "456.00m"
@@ -46,8 +45,7 @@ df --output=size "$mount_dir" |tee df2
not diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvreduce ext4 on LUKS1
lvcreate -n $lv -L 456M $vg
@@ -55,7 +53,7 @@ echo 93R4P4pIqAH8 | cryptsetup luksFormat -i1 --type luks1 "$DM_DEV_DIR/$vg/$lv"
echo 93R4P4pIqAH8 | cryptsetup luksOpen "$DM_DEV_DIR/$vg/$lv" $cr
mkfs.ext4 /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
lvresize -L-100M --yes --fs resize $vg/$lv
check lv_field $vg/$lv lv_size "356.00m"
@@ -63,25 +61,23 @@ df --output=size "$mount_dir" |tee df2
not diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvextend xfs on LUKS1
-lvcreate -n $lv -L 256M $vg
+lvcreate -n $lv -L 320M $vg
echo 93R4P4pIqAH8 | cryptsetup luksFormat -i1 --type luks1 "$DM_DEV_DIR/$vg/$lv"
echo 93R4P4pIqAH8 | cryptsetup luksOpen "$DM_DEV_DIR/$vg/$lv" $cr
mkfs.xfs /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
-lvextend -L+200M --fs resize $vg/$lv
+lvextend -L+136M --fs resize $vg/$lv
check lv_field $vg/$lv lv_size "456.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvreduce xfs on LUKS1
lvcreate -n $lv -L 456M $vg
@@ -89,7 +85,7 @@ echo 93R4P4pIqAH8 | cryptsetup luksFormat -i1 --type luks1 "$DM_DEV_DIR/$vg/$lv"
echo 93R4P4pIqAH8 | cryptsetup luksOpen "$DM_DEV_DIR/$vg/$lv" $cr
mkfs.xfs /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
# xfs cannot be reduced
not lvresize -L-100M --yes --fs resize $vg/$lv
@@ -98,15 +94,14 @@ df --output=size "$mount_dir" |tee df2
diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvextend ext4 on plain crypt (no header)
lvcreate -n $lv -L 256M $vg
echo 93R4P4pIqAH8 | cryptsetup create $cr "$DM_DEV_DIR/$vg/$lv"
mkfs.ext4 /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
# fails when no fs is found for --fs resize
not lvextend -L+200M --yes --fs resize $vg/$lv
@@ -115,15 +110,14 @@ df --output=size "$mount_dir" |tee df2
diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvreduce ext4 on plain crypt (no header)
lvcreate -n $lv -L 456M $vg
echo 93R4P4pIqAH8 | cryptsetup create $cr "$DM_DEV_DIR/$vg/$lv"
mkfs.ext4 /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
# fails when no fs is found for --fs resize
not lvresize -L-100M --yes --fs resize $vg/$lv
@@ -132,8 +126,7 @@ df --output=size "$mount_dir" |tee df2
diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# lvresize uses helper only for crypt dev resize
# because the fs was resized separately beforehand
@@ -142,7 +135,7 @@ echo 93R4P4pIqAH8 | cryptsetup luksFormat -i1 --type luks1 "$DM_DEV_DIR/$vg/$lv"
echo 93R4P4pIqAH8 | cryptsetup luksOpen "$DM_DEV_DIR/$vg/$lv" $cr
mkfs.ext4 /dev/mapper/$cr
mount /dev/mapper/$cr "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
# resize only the fs (to 256M), not the crypt dev or LV
umount "$mount_dir"
@@ -162,8 +155,7 @@ df --output=size "$mount_dir" |tee df2
not diff df1 df2
umount "$mount_dir"
cryptsetup close $cr
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
# test with LUKS2?
1 year
main - tests: different check for mounted volume
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=4af8063c963f0610761...
Commit: 4af8063c963f0610761d9cecbd6ed23b52f77256
Parent: 2fde4b6baa09f33890d4a5b951dc51b81828ef63
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat May 6 19:39:25 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:43:22 2023 +0200
tests: different check for mounted volume
It appears newer mount allows repeated mounting ??
Anyway - do the check with grep.
---
test/shell/lvconvert-thin-external-cache.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/shell/lvconvert-thin-external-cache.sh b/test/shell/lvconvert-thin-external-cache.sh
index 465ce52ad..a8b95b274 100644
--- a/test/shell/lvconvert-thin-external-cache.sh
+++ b/test/shell/lvconvert-thin-external-cache.sh
@@ -51,7 +51,7 @@ not lvconvert --thin --thinpool $vg/tpool $vg/$lv1
lvchange --cachemode writethrough $vg/$lv1
# Check $lv1 remains mounted (so it's not been unmounted by systemd)
-not mount "$DM_DEV_DIR/$vg/$lv1" mnt
+mountpoint "$PWD/mnt"
lvconvert --thin $vg/$lv1 --originname extorg --thinpool $vg/tpool
1 year
main - tests: check for lvmdbusd running in the system
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=2fde4b6baa09f33890d...
Commit: 2fde4b6baa09f33890d4a5b951dc51b81828ef63
Parent: aa19f2aa3d93b48c5e58a897f26de38b8080d483
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat May 6 20:35:42 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:43:22 2023 +0200
tests: check for lvmdbusd running in the system
Check for running (possibly leftover) lvmdbusd running in the
system - as this daemon may interfere with this test as in this
case both be operating on same 'live' data in /run/lvm.
---
test/shell/hints.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/test/shell/hints.sh b/test/shell/hints.sh
index 7fe0e33f5..6c1711643 100644
--- a/test/shell/hints.sh
+++ b/test/shell/hints.sh
@@ -17,6 +17,11 @@ SKIP_WITH_LVMLOCKD=1
. lib/inittest
+# Since this test is currenly using 'system's' hints,
+# it cannot be running, while lvmdbusd operates in the system.
+# FIXME: sometimes test suite itself 'leaks' lvmdbusd process.
+pgrep lvmdbusd && skip "Can't run this test, while lvmdbusd is running"
+
RUNDIR="/run"
test -d "$RUNDIR" || RUNDIR="/var/run"
HINTS="$RUNDIR/lvm/hints"
1 year
main - tests: update lvextend tests
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=aa19f2aa3d93b48c5e5...
Commit: aa19f2aa3d93b48c5e58a897f26de38b8080d483
Parent: 6e8ede833ba4b974f7e2acf8c7e36eaba9661fe8
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri May 5 01:43:29 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:43:22 2023 +0200
tests: update lvextend tests
Make test faster by agregating sets of operation to work on a single
created filesystem yet checking all the variants of extension and reduction.
Split 'xfs' part into separate test and convert it for use of the
minimal size 300M nowdays required by mkfs.xfs.
---
test/shell/lvresize-fs.sh | 1158 ++++++++++----------------------------------
test/shell/lvresize-xfs.sh | 301 ++++++++++++
2 files changed, 562 insertions(+), 897 deletions(-)
diff --git a/test/shell/lvresize-fs.sh b/test/shell/lvresize-fs.sh
index de234aad5..cf93a4222 100644
--- a/test/shell/lvresize-fs.sh
+++ b/test/shell/lvresize-fs.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (C) 2007-2016 Red Hat, Inc. All rights reserved.
+# Copyright (C) 2007-2023 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
@@ -15,17 +15,22 @@ SKIP_WITH_LVMPOLLD=1
. lib/inittest
-aux prepare_vg 3 256
+aux prepare_vg 2 100
-which mkfs.xfs || skip
+which mkfs.ext4 || skip
+which resize2fs || skip
-# Test combinations of the following:
-# lvreduce / lvextend
-# no fs / ext4 / xfs
-# each --fs opt / no --fs opt / --resizefs
-# active / inactive
-# mounted / unmounted
-# fs size less than, equal to or greater than reduced lv size
+#
+# Workaroudn for kernel bug fixed with:
+# a408f33e895e455f16cf964cb5cd4979b658db7b
+# refreshing DM device - using fsfreeze with suspend
+#
+workaround_() {
+ blkid -p "$DM_DEV_DIR/$vg/$lv" >/dev/null || {
+ dmsetup suspend $vg-$lv
+ dmsetup resume $vg-$lv
+ }
+}
mount_dir="mnt_lvresize_fs"
mkdir -p "$mount_dir"
@@ -33,690 +38,378 @@ mkdir -p "$mount_dir"
mount_dir_space="other mnt dir"
mkdir -p "$mount_dir_space"
-# Tests require a libblkid version that shows FSLASTBLOCK
-lvcreate -n $lv1 -L 300 $vg
-mkfs.xfs -f "$DM_DEV_DIR/$vg/$lv1"
-blkid -p "$DM_DEV_DIR/$vg/$lv1" | grep FSLASTBLOCK || skip
-lvchange -an $vg
-lvremove $vg/$lv1
+# Test combinations of the following:
+# lvreduce / lvextend
+# no fs / ext4
+# each --fs opt / no --fs opt / --resizefs
+# active / inactive
+# mounted / unmounted
+# fs size less than, equal to or greater than reduced lv size
+
+
+###################
#
# lvextend, no fs
#
+###################
# lvextend, no fs, active, no --fs
-lvcreate -n $lv -L 256M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, no fs, inactive, no --fs
-lvcreate -n $lv -L 256M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-lvchange -an $vg/$lv
-lvextend -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvremove $vg/$lv
+lvcreate -n $lv -L 10M $vg
+lvextend -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
# lvextend, no fs, active, --fs resize fails with no fs found
-lvcreate -n $lv -L 256M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-not lvextend -L+200M --fs resize $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+not lvextend -L+20M --fs resize $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
+
lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvextend, no fs, inactive, --fs resize error requires active lv
-lvcreate -n $lv -L 256M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
+not lvextend -L+20M --fs resize $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
+
+# lvextend, no fs, inactive, no --fs
+lvextend -L+30M $vg/$lv
+check lv_field $vg/$lv lv_size "60.00m"
+
+lvremove -f $vg
+
+
+###################
+#
+# lvreduce, no fs
+#
+###################
+
+# lvreduce, no fs, active, no --fs setting is same as --fs checksize
+lvcreate -n $lv -L 50M $vg
+lvreduce -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "40.00m"
lvchange -an $vg/$lv
-not lvextend -L+200M --fs resize $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
-lvremove $vg/$lv
+# lvreduce, no fs, inactive, no --fs setting is same as --fs checksize
+not lvreduce -L-10M $vg/$lv
+lvreduce --fs checksize -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
+
+# lvreduce, no fs, inactive, --fs ignore
+lvreduce -L-10M --fs ignore $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
+
+# lvreduce, no fs, active, --fs resize requires fs to be found
+lvchange -ay $vg/$lv
+not lvreduce -L-10M --fs resize $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
+
+lvremove -f $vg/$lv
+
+
+#################
#
# lvextend, ext4
#
+#################
-# lvextend, ext4, active, mounted, no --fs setting is same as --fs ignore
-lvcreate -n $lv -L 256M $vg
+# Use one instance of ext4 for series of lvextend tests:
+lvcreate -n $lv -L 20M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+
+# --fs tests require a libblkid version that shows FSLASTBLOCK
+# so exit 0 test here, if the feature is not present
+blkid -p "$DM_DEV_DIR/$vg/$lv" | grep FSLASTBLOCK || exit 0
+
+
+# lvextend, ext4, active, mounted, no --fs setting is same as --fs ignore
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=8 oflag=direct
+lvextend -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
# with no --fs used, the fs size should be the same
df --output=size "$mount_dir" |tee df2
diff df1 df2
resize2fs "$DM_DEV_DIR/$vg/$lv"
df --output=size "$mount_dir" |tee df3
not diff df2 df3
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, ext4, inactive, --fs ignore
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvchange -an $vg/$lv
-lvextend --fs ignore -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvremove $vg/$lv
+dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=10 oflag=direct
+# keep mounted fs
# lvextend, ext4, active, mounted, --fs ignore
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df1
-lvextend --fs ignore -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+lvextend --fs ignore -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "40.00m"
df --output=size "$mount_dir" |tee df2
diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep mounted fs
# lvextend, ext4, active, mounted, --fs resize
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+lvextend --fs resize -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "50.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep mounted fs
+
+workaround_
# lvextend, ext4, active, mounted, --resizefs (same as --fs resize)
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --resizefs -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+lvextend --resizefs -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "60.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep mounted fs
-# lvextend, ext4, active, mounted, --fs resize --fsmode manage (same as --fs resize)
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize --fsmode manage -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+workaround_
-# lvextend, ext4, active, mounted, --fs resize --fsmode offline
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+# lvextend, ext4, active, mounted, --fs resize --fsmode manage (same as --fs resize)
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize --fsmode offline -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-# fsmode offline leaves fs unmounted
-df -a | tee dfa
-not grep "$mount_dir" dfa
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+lvextend --fs resize --fsmode manage -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "70.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+dd if=/dev/zero of="$mount_dir/zeros3" bs=1M count=10 oflag=direct
+# keep mounted fs
-# lvextend, ext4, active, mounted, --fs resize --fsmode nochange
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize --fsmode nochange -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+workaround_
# lvextend, ext4, active, mounted, --fs resize_fsadm
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize_fsadm -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+lvextend --fs resize_fsadm -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "80.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep mounted fs
-# lvextend, ext4, active, unmounted, --fs resize --fsmode nochange
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvextend --fs resize --fsmode nochange -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+workaround_
-# lvextend, ext4, active, unmounted, --fs resize
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvextend --fs resize -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, ext4, active, unmounted, --fs resize_fsadm
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+# lvextend, ext4, active, mounted, --fs resize --fsmode nochange
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvextend --fs resize_fsadm -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+lvextend --fs resize --fsmode nochange -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "90.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep mounted fs
# lvextend|lvreduce, ext4, active, mounted, --fs resize, renamed LV
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
lvrename $vg/$lv $vg/$lv2
not lvextend --fs resize -L+32M $vg/$lv2
not lvreduce --fs resize -L-32M $vg/$lv2
umount "$mount_dir"
-lvchange -an $vg/$lv2
-lvremove $vg/$lv2
# lvextend|lvreduce, ext4, active, mounted, mount dir with space, --fs resize, renamed LV
-lvcreate -n $lv -L 256M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space"
-lvrename $vg/$lv $vg/$lv2
-not lvextend --fs resize -L+32M $vg/$lv2
-not lvreduce --fs resize -L-32M $vg/$lv2
+mount "$DM_DEV_DIR/$vg/$lv2" "$mount_dir_space"
+lvrename $vg/$lv2 $vg/$lv3
+not lvextend --fs resize -L+32M $vg/$lv3
+not lvreduce --fs resize -L-32M $vg/$lv3
umount "$mount_dir_space"
-lvchange -an $vg/$lv2
-lvremove $vg/$lv2
+lvremove -f $vg/$lv3
+
+#####################################
#
-# lvextend, xfs
+# Now let do some unmounted tests
#
+#####################################
-# lvextend, xfs, active, mounted, no --fs setting is same as --fs ignore
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-# with no --fs used, the fs size should be the same
-df --output=size "$mount_dir" |tee df2
-diff df1 df2
-xfs_growfs "$DM_DEV_DIR/$vg/$lv"
-df --output=size "$mount_dir" |tee df3
-not diff df2 df3
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, xfs, inactive, --fs ignore
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvchange -an $vg/$lv
-lvextend --fs ignore -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvremove $vg/$lv
-
-# lvextend, xfs, active, mounted, --fs ignore
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-lvextend --fs ignore -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, xfs, active, mounted, --fs resize
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, xfs, active, mounted, --resizefs (same as --fs resize)
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --resizefs -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# prepare new ext4 setup
+lvcreate -n $lv -L 15M $vg
+mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-# lvextend, xfs, active, mounted, --fs resize --fsmode manage (same as --fs resize)
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize --fsmode manage -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
+# lvextend, ext4, inactive, --fs ignore
lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvextend --fs ignore -L+5M $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
+lvchange -ay $vg/$lv
-# lvextend, xfs, active, mounted, --fs resize --fsmode offline
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+# lvextend, ext4, active, mounted, --fs resize --fsmode offline
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-# xfs_growfs requires the fs to be mounted, so extending the lv is
-# succeeds, then the xfs extend fails because it cannot be done unmounted
-not lvextend --fs resize --fsmode offline -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=8 oflag=direct
+lvextend --fs resize --fsmode offline -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
+# fsmode offline leaves fs unmounted
df -a | tee dfa
-grep "$mount_dir" dfa
-df --output=size "$mount_dir" |tee df2
-# fs not extended so fs size not changed
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, xfs, active, mounted, --fs resize --fsmode nochange
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize --fsmode nochange -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvextend, xfs, active, mounted, --fs resize_fsadm
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+not grep "$mount_dir" dfa
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-lvextend --fs resize_fsadm -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=10 oflag=direct
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# lvextend, xfs, active, unmounted, --fs resize --fsmode nochange
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+# lvextend, ext4, active, unmounted, --fs resize --fsmode nochange
df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-# xfs_growfs requires the fs to be mounted to grow, so --fsmode nochange
-# with an unmounted fs fails
-not lvextend --fs resize --fsmode nochange -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+lvextend --fs resize --fsmode nochange -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "40.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
-# fs not extended so fs size not changed
-diff df1 df2
+not diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# lvextend, xfs, active, unmounted, --fs resize
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-# --yes needed because mount changes are required and plain "resize"
-# fsopt did not specify if the user wants to change mount state
-lvextend --yes --fs resize -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+# lvextend, ext4, active, unmounted, --fs resize
+lvextend --fs resize -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "50.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# lvextend, xfs, active, unmounted, --fs resize_fsadm
-lvcreate -n $lv -L 256M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df1
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=200 conv=fdatasync
-umount "$mount_dir"
-lvextend --fs resize_fsadm -L+200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+# lvextend, ext4, active, unmounted, --fs resize_fsadm
+lvextend --fs resize_fsadm -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "60.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
not diff df1 df2
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=200 conv=fdatasync
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-#
-# lvreduce, no fs
-#
-
-# lvreduce, no fs, active, no --fs setting is same as --fs checksize
-lvcreate -n $lv -L 456M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, no fs, inactive, no --fs setting is same as --fs checksize
-lvcreate -n $lv -L 456M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-lvchange -an $vg/$lv
-not lvreduce -L-200M $vg/$lv
-lvreduce --fs checksize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
-lvremove $vg/$lv
-
-# lvreduce, no fs, active, --fs resize requires fs to be found
-lvcreate -n $lv -L 456M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-not lvreduce -L-200M --fs resize $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, no fs, inactive, --fs ignore
-lvcreate -n $lv -L 456M $vg
-aux wipefs_a "$DM_DEV_DIR/$vg/$lv"
-lvchange -an $vg/$lv
-lvreduce -L-200M --fs ignore $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
+####################################################################
#
# lvreduce, ext4, no --fs setting and the equivalent --fs checksize
# i.e. fs is not resized
#
+####################################################################
# lvreduce, ext4, active, mounted, no --fs setting is same as --fs checksize
# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
+lvcreate -n $lv -L 20M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
+lvextend -L+25M $vg/$lv
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
+# fs is 20M, reduced size is 27M, so no fs reduce is needed
# todo: check that resize2fs was not run?
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
+lvreduce -L27M $vg/$lv
+check lv_field $vg/$lv lv_size "27.00m"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep fs mounted
# lvreduce, ext4, active, mounted, no --fs setting is same as --fs checksize
# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 200M, so no fs reduce is needed
-# todo: check that resize2fs was not run?
-lvreduce -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
+lvreduce -L20M $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep fs mounted
# lvreduce, ext4, active, mounted, no --fs setting is same as --fs checksize
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
# lvreduce fails because fs needs to be reduced and checksize does not resize
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce -L-18M $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# keep fs mounted
# lvreduce, ext4, active, mounted, no --fs setting is same as --fs checksize
# fs larger than the reduced size, fs is using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=300 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# lvreduce fails because fs needs to be reduced and checksize does not resize
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce -L-5M $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg/$lv
+
+
+############################################################
+#
# repeat lvreduce tests with unmounted instead of mounted fs
+#
+############################################################
# lvreduce, ext4, active, unmounted, no --fs setting is same as --fs checksize
# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
+lvcreate -n $lv -L 20M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
+lvextend -L+25M $vg/$lv
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
umount "$mount_dir"
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+# fs is 20M, reduced size is 27M, so no fs reduce is needed
+lvreduce -L27M $vg/$lv
+check lv_field $vg/$lv lv_size "27.00m"
# lvreduce, ext4, active, unmounted, no --fs setting is same as --fs checksize
# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-# fs is 200M, reduced size is 200M, so no fs reduce is needed
-lvreduce -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
+# fs is 20M, reduced size is 20M, so no fs reduce is needed
+lvreduce -L20M $vg/$lv
+check lv_field $vg/$lv lv_size "20.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+
# lvreduce, ext4, active, unmounted, no --fs setting is same as --fs checksize
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
# lvreduce fails because fs needs to be reduced and checksize does not resize
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+not lvreduce -L-5M $vg/$lv
-# lvreduce, ext4, active, unmounted, no --fs setting is same as --fs checksize
-# fs larger than the reduced size, fs is using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=300 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
+# lvreduce, ext4, active, unmounted, no --fs setting is same as --fs checksize
+# fs larger than the reduced size, fs is using reduced space
# lvreduce fails because fs needs to be reduced and checksize does not resize
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce -L-10M $vg/$lv
+
+check lv_field $vg/$lv lv_size "20.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+lvremove -f $vg
+
+
+#########################################################################
+#
# repeat a couple prev lvreduce that had no --fs setting,
# now using --fs checksize to verify it's the same as using no --fs set
+#
+#########################################################################
# lvreduce, ext4, active, mounted, --fs checksize (same as no --fs set)
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
+lvcreate -n $lv -L 100M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
df --output=size "$mount_dir" |tee df1
# lvreduce fails because fs needs to be reduced and checksize does not resize
-not lvreduce --fs checksize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce --fs checksize -L-50M $vg/$lv
+check lv_field $vg/$lv lv_size "100.00m"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, unmounted, --fs checksize (same as no --fs set)
# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
+lvextend -L+50M $vg/$lv
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
df --output=size "$mount_dir" |tee df1
umount "$mount_dir"
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce --fs checksize -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
+
+# fs is 100M, reduced size is 120M, so no fs reduce is needed
+lvreduce --fs checksize -L120M $vg/$lv
+check lv_field $vg/$lv lv_size "120.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
df --output=size "$mount_dir" |tee df2
# fs size unchanged
diff df1 df2
umount "$mount_dir"
lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce with inactive and no --fs setting fails because
# default behavior is fs checksize which activates the LV
@@ -724,497 +417,168 @@ lvremove $vg/$lv
# lvreduce, ext4, inactive, no --fs setting same as --fs checksize
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-lvchange -an $vg/$lv
# lvreduce fails because default is --fs checksize which sees the fs
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvremove $vg/$lv
+not lvreduce -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "120.00m"
+lvremove -f $vg/$lv
+
+
+#################################
#
# lvreduce, ext4, --fs resize*
#
-
-# lvreduce, ext4, active, mounted, --fs resize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, ext4, active, mounted, --fs resize
-# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 200M, so no fs reduce is needed
-lvreduce -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
-ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+#################################
# lvreduce, ext4, active, mounted, --fs resize
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
+lvcreate -n $lv -L 50M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
# lvreduce runs resize2fs to shrink the fs
-lvreduce --yes --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --yes --fs resize -L-20M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
ls -l $mount_dir/zeros1
df --output=size "$mount_dir" |tee df2
# fs size is changed
not diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, mounted, --fs resize
# fs larger than the reduced size, fs is using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=300 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
# lvreduce runs resize2fs to shrink the fs but resize2fs fails
# the fs is not remounted after resize2fs fails because the
# resize failure might leave the fs in an unknown state
-not lvreduce --yes --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce --yes --fs resize -L-15M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
ls -l $mount_dir/zeros1
-ls -l $mount_dir/zeros2
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df3
# fs size is unchanged
-diff df1 df2
+diff df2 df3
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# repeat with unmounted instead of mounted
+lvremove -f $vg/$lv
-# lvreduce, ext4, active, unmounted, --fs resize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# lvreduce, ext4, active, unmounted, --fs resize
-# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-# fs is 200M, reduced size is 200M, so no fs reduce is needed
-lvreduce -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+############################################
+#
+# repeat with unmounted instead of mounted
+#
+############################################
# lvreduce, ext4, active, unmounted, --fs resize
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
+lvcreate -n $lv -L 50M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
umount "$mount_dir"
# lvreduce runs resize2fs to shrink the fs
-lvreduce --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --fs resize -L-20M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
ls -l $mount_dir/zeros1
df --output=size "$mount_dir" |tee df2
# fs size is changed
not diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, unmounted, --fs resize
# fs larger than the reduced size, fs is using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=300 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
# lvreduce runs resize2fs to shrink the fs but resize2fs fails
-not lvreduce --yes --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce --yes --fs resize -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "30.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df3
# fs size is unchanged
-diff df1 df2
+diff df2 df3
umount "$mount_dir"
lvchange -an $vg/$lv
lvremove $vg/$lv
+
+##################################################################
+#
# repeat resizes that shrink the fs, replacing --fs resize with
# --fs resize --fsmode nochange|offline, --fs resize_fsadm.
# while mounted and unmounted
+#
+##################################################################
# lvreduce, ext4, active, mounted, --fs resize --fsmode nochange
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
+lvcreate -n $lv -L 90M $vg
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
df --output=size "$mount_dir" |tee df1
# lvreduce needs to unmount to run resize2fs but fsmode nochange doesn't let it
-not lvreduce --fs resize --fsmode nochange -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
+not lvreduce --fs resize --fsmode nochange -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "90.00m"
df --output=size "$mount_dir" |tee df2
# fs size is unchanged
diff df1 df2
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, unmounted, --fs resize --fsmode nochange
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
# lvreduce runs resize2fs to shrink the fs
-lvreduce --fs resize --fsmode nochange -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --fs resize --fsmode nochange -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "80.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df3
# fs size is changed
-not diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+not diff df2 df3
+# keep fs mounted
# lvreduce, ext4, active, mounted, --fs resize --fsmode offline
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
# lvreduce runs resize2fs to shrink the fs
# fsmode offline leaves the fs unmounted
-lvreduce --fs resize --fsmode offline -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --fs resize --fsmode offline -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "70.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df4
# fs size is changed
-not diff df1 df2
+not diff df3 df4
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, unmounted, --fs resize --fsmode offline
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
# lvreduce runs resize2fs to shrink the fs
-lvreduce --fs resize --fsmode offline -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --fs resize --fsmode offline -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "60.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df5
# fs size is changed
-not diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
+not diff df4 df5
+# keep fs mounted
# lvreduce, ext4, active, mounted, --fs resize_fsadm
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
# lvreduce runs resize2fs to shrink the fs
-lvreduce --yes --fs resize_fsadm -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --yes --fs resize_fsadm -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "50.00m"
ls -l $mount_dir/zeros1
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df6
# fs size is changed
-not diff df1 df2
+not diff df5 df6
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
# lvreduce, ext4, active, unmounted, --fs resize_fsadm
# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.ext4 "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
# lvreduce runs resize2fs to shrink the fs
-lvreduce --fs resize_fsadm -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "256.00m"
+lvreduce --fs resize_fsadm -L-10M $vg/$lv
+check lv_field $vg/$lv lv_size "40.00m"
mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
+df --output=size "$mount_dir" |tee df7
# fs size is changed
-not diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-#
-# lvreduce, xfs (xfs does not support shrinking)
-#
-
-# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
-# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 200M, so no fs reduce is needed
-lvreduce -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
-# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# lvreduce fails because fs needs to be reduced
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, unmounted, no --fs setting is same as --fs checksize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, mounted, --fs resize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, mounted, --fs resize
-# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-# lvreduce fails because xfs cannot shrink
-not lvreduce --yes --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, active, unmounted, --fs resize*
-# fs larger than the reduced size, fs not using reduced space
-lvcreate -n $lv -L 456M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-# lvreduce fails because xfs cannot shrink
-not lvreduce --yes --fs resize -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-not lvreduce --yes --fs resize --fsmode manage -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-not lvreduce --yes --fs resize --fsmode nochange -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-not lvreduce --yes --fs resize --fsmode offline -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-not lvreduce --yes --fs resize_fsadm -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-not lvreduce --yes --resizefs -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, inactive, no --fs setting is same as --fs checksize
-# fs equal to the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-lvchange -an $vg/$lv
-# no fs reduce is needed
-lvreduce --fs checksize -L200M $vg/$lv
-check lv_field $vg/$lv lv_size "200.00m"
-lvchange -ay $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
-umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-
-# lvreduce, xfs, inactive, no fs setting is same as --fs checksize
-# fs smaller than the reduced size
-lvcreate -n $lv -L 200M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-lvextend -L+256M $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=128 conv=fdatasync
-df --output=size "$mount_dir" |tee df1
-umount "$mount_dir"
-lvchange -an $vg/$lv
-# fs is 200M, reduced size is 216M, so no fs reduce is needed
-lvreduce --fs checksize -L216M $vg/$lv
-check lv_field $vg/$lv lv_size "216.00m"
-lvchange -ay $vg/$lv
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-df --output=size "$mount_dir" |tee df2
-# fs size unchanged
-diff df1 df2
+not diff df6 df7
umount "$mount_dir"
-lvchange -an $vg/$lv
-lvremove $vg/$lv
-# lvreduce, xfs, inactive, no --fs setting is same as --fs checksize
-# fs larger than the reduced size
-lvcreate -n $lv -L 456M $vg
-mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
-mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
-dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=100 conv=fdatasync
-umount "$mount_dir"
-lvchange -an $vg/$lv
-# lvreduce fails because fs needs to be reduced
-not lvreduce -L-200M $vg/$lv
-check lv_field $vg/$lv lv_size "456.00m"
-lvremove $vg/$lv
vgremove -ff $vg
diff --git a/test/shell/lvresize-xfs.sh b/test/shell/lvresize-xfs.sh
new file mode 100644
index 000000000..0a3b89012
--- /dev/null
+++ b/test/shell/lvresize-xfs.sh
@@ -0,0 +1,301 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2023 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
+
+
+SKIP_WITH_LVMPOLLD=1
+
+. lib/inittest
+
+aux prepare_vg 1 500
+
+which mkfs.xfs || skip
+which xfs_growfs || skip
+
+mount_dir="mnt_lvresize_fs"
+mkdir -p "$mount_dir"
+
+mount_dir_space="other mnt dir"
+mkdir -p "$mount_dir_space"
+
+
+# Test combinations of the following:
+# lvreduce / lvextend
+# xfs
+# each --fs opt / no --fs opt / --resizefs
+# active / inactive
+# mounted / unmounted
+# fs size less than, equal to or greater than reduced lv size
+
+#################
+#
+# lvextend, xfs
+#
+#################
+
+# lvextend, xfs, active, mounted, no --fs setting is same as --fs ignore
+lvcreate -n $lv -L 300M $vg
+mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+df --output=size "$mount_dir" |tee df1
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
+lvextend -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "320.00m"
+# with no --fs used, the fs size should be the same
+df --output=size "$mount_dir" |tee df2
+diff df1 df2
+xfs_growfs "$DM_DEV_DIR/$vg/$lv"
+df --output=size "$mount_dir" |tee df3
+not diff df2 df3
+dd if=/dev/zero of="$mount_dir/zeros2" bs=1M count=20 oflag=direct
+# keep it mounted
+
+# lvextend, xfs, active, mounted, --fs ignore
+df --output=size "$mount_dir" |tee df1
+lvextend --fs ignore -L+20 $vg/$lv
+check lv_field $vg/$lv lv_size "340.00m"
+df --output=size "$mount_dir" |tee df2
+diff df1 df2
+
+# lvextend, xfs, active, mounted, --fs resize
+lvextend --fs resize -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "360.00m"
+df --output=size "$mount_dir" |tee df3
+not diff df2 df3
+
+# lvextend, xfs, active, mounted, --resizefs (same as --fs resize)
+lvextend --resizefs -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "370.00m"
+df --output=size "$mount_dir" |tee df4
+not diff df3 df4
+
+# lvextend, xfs, active, mounted, --fs resize --fsmode manage (same as --fs resize)
+lvextend --fs resize --fsmode manage -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "380.00m"
+df --output=size "$mount_dir" |tee df2
+not diff df1 df2
+
+umount "$mount_dir"
+lvchange -an $vg/$lv
+
+# lvextend, xfs, inactive, --fs ignore
+lvextend --fs ignore -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+
+lvremove -f $vg/$lv
+
+####################
+# start with new fs
+####################
+
+# lvextend, xfs, active, mounted, --fs resize --fsmode offline
+lvcreate -n $lv -L 300M $vg
+mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space"
+df --output=size "$mount_dir_space" |tee df1
+dd if=/dev/zero of="$mount_dir_space/zeros1" bs=1M count=20 oflag=direct
+# xfs_growfs requires the fs to be mounted, so extending the lv is
+# succeeds, then the xfs extend fails because it cannot be done unmounted
+not lvextend --fs resize --fsmode offline -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "320.00m"
+df -a | tee dfa
+grep "$mount_dir_space" dfa
+df --output=size "$mount_dir_space" |tee df2
+# fs not extended so fs size not changed
+diff df1 df2
+
+# lvextend, xfs, active, mounted, --fs resize --fsmode nochange
+lvextend --fs resize --fsmode nochange -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "340.00m"
+df --output=size "$mount_dir_space" |tee df2
+not diff df1 df2
+
+# lvextend, xfs, active, mounted, --fs resize_fsadm
+lvextend --fs resize_fsadm -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "360.00m"
+df --output=size "$mount_dir_space" |tee df3
+not diff df2 df3
+umount "$mount_dir_space"
+
+# lvextend, xfs, active, unmounted, --fs resize --fsmode nochange
+# xfs_growfs requires the fs to be mounted to grow, so --fsmode nochange
+# with an unmounted fs fails
+not lvextend --fs resize --fsmode nochange -L+20M $vg/$lv
+check lv_field $vg/$lv lv_size "380.00m"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space"
+df --output=size "$mount_dir_space" |tee df4
+# fs not extended so fs size not changed
+diff df3 df4
+umount "$mount_dir_space"
+
+# lvextend, xfs, active, unmounted, --fs resize
+# --yes needed because mount changes are required and plain "resize"
+# fsopt did not specify if the user wants to change mount state
+lvextend --yes --fs resize -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "390.00m"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space"
+df --output=size "$mount_dir_space" |tee df5
+not diff df4 df5
+umount "$mount_dir_space"
+
+# lvextend, xfs, active, unmounted, --fs resize_fsadm
+lvextend --fs resize_fsadm -L+10M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space"
+df --output=size "$mount_dir_space" |tee df6
+not diff df5 df6
+umount "$mount_dir_space"
+lvremove -f $vg/$lv
+
+
+#################################################
+#
+# lvreduce, xfs (xfs does not support shrinking)
+#
+##################################################
+
+# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
+# fs smaller than the reduced size
+lvcreate -n $lv -L 300M $vg
+mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+lvextend -L+100M $vg/$lv
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
+df --output=size "$mount_dir" |tee df1
+# fs is 300M, reduced size is 326M, so no fs reduce is needed
+lvreduce -L326M $vg/$lv
+check lv_field $vg/$lv lv_size "326.00m"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+umount "$mount_dir"
+lvchange -an $vg/$lv
+
+# lvreduce, xfs, inactive, no fs setting is same as --fs checksize
+# fs smaller than the reduced size
+# fs is 200M, reduced size is 216M, so no fs reduce is needed
+lvreduce --fs checksize -L316M $vg/$lv
+check lv_field $vg/$lv lv_size "316.00m"
+lvchange -ay $vg/$lv
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+
+# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
+# fs equal to the reduced size
+# fs is 300M, reduced size is 300M, so no fs reduce is needed
+lvreduce -L300M $vg/$lv
+check lv_field $vg/$lv lv_size "300.00m"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+
+# lvreduce, xfs, active, unmounted, no --fs setting is same as --fs checksize
+# fs smaller than the reduced size
+lvextend -L+100M $vg/$lv
+umount "$mount_dir"
+# fs is 300M, reduced size is 316M, so no fs reduce is needed
+lvreduce -L356M $vg/$lv
+check lv_field $vg/$lv lv_size "356.00m"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+
+# lvreduce, xfs, active, mounted, --fs resize
+# fs smaller than the reduced size
+# fs is 300M, reduced size is 316M, so no fs reduce is needed
+lvreduce -L316M $vg/$lv
+check lv_field $vg/$lv lv_size "316.00m"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+umount "$mount_dir"
+lvchange -an $vg/$lv
+
+
+# lvreduce, xfs, inactive, no --fs setting is same as --fs checksize
+# fs equal to the reduced size
+# fs is 300M, reduced size is 300M, so no fs reduce is needed
+lvreduce --fs checksize -L300M $vg/$lv
+check lv_field $vg/$lv lv_size "300.00m"
+lvchange -ay $vg/$lv
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+umount "$mount_dir"
+
+lvremove -f $vg/$lv
+
+
+##########################################################
+#
+# lvreduce bigger xfs size (xfs does not support shrinking)
+#
+##########################################################
+
+# lvreduce, xfs, active, mounted, no --fs setting is same as --fs checksize
+# fs larger than the reduced size, fs not using reduced space
+lvcreate -n $lv -L 400M $vg
+mkfs.xfs "$DM_DEV_DIR/$vg/$lv"
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=20 oflag=direct
+df --output=size "$mount_dir" |tee df1
+# lvreduce fails because fs needs to be reduced
+not lvreduce -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+# keep fs mounted
+
+# lvreduce, xfs, active, mounted, --fs resize
+# fs larger than the reduced size, fs not using reduced space
+# lvreduce fails because xfs cannot shrink
+not lvreduce --yes --fs resize -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+umount "$mount_dir"
+
+# lvreduce, xfs, active, unmounted, --fs resize*
+# fs larger than the reduced size, fs not using reduced space
+# lvreduce fails because xfs cannot shrink
+not lvreduce --yes --fs resize -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+not lvreduce --yes --fs resize --fsmode manage -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+not lvreduce --yes --fs resize --fsmode nochange -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+not lvreduce --yes --fs resize --fsmode offline -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+not lvreduce --yes --fs resize_fsadm -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+not lvreduce --yes --resizefs -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+
+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir"
+df --output=size "$mount_dir" |tee df2
+# fs size unchanged
+diff df1 df2
+umount "$mount_dir"
+lvchange -an $vg/$lv
+
+# lvreduce, xfs, inactive, no --fs setting is same as --fs checksize
+# fs larger than the reduced size
+# lvreduce fails because fs needs to be reduced
+not lvreduce -L-100M $vg/$lv
+check lv_field $vg/$lv lv_size "400.00m"
+
+vgremove -f $vg
1 year
main - aux: retry brd removal
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=6e8ede833ba4b974f7e...
Commit: 6e8ede833ba4b974f7e2acf8c7e36eaba9661fe8
Parent: 87eae82195d5272808614b14843c302e7bed80d5
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat May 6 22:38:58 2023 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Sat May 6 22:41:23 2023 +0200
aux: retry brd removal
Try to remove brd twice if there is some collision with udevd.
Instanciate only 1 ramdisk.
Use just 'eval' for '--nameprefixes' results.
---
test/lib/aux.sh | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index c6b6ac1cc..5a3f0fe44 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -418,9 +418,7 @@ teardown_devs_prefixed() {
for dm in $(dm_info name,open --separator ';' --nameprefixes --unquoted --sort open,"$sortby" -S "name=~$prefix" --mangle none || true) ; do
test "$dm" != "No devices found" || break 2
- DM_NAME=${dm##DM_NAME=}
- DM_NAME=${DM_NAME%%;DM_OPEN*}
- DM_OPEN=${dm##*;DM_OPEN=}
+ eval "$dm"
local force="-f"
if test "$i" = 0; then
if test "$once" = 1 ; then
@@ -452,17 +450,24 @@ teardown_devs() {
test ! -f MD_DEV || cleanup_md_dev
test ! -f DEVICES || teardown_devs_prefixed "$PREFIX"
- test ! -f RAMDISK || { modprobe -r brd || true ; }
+ if test -f RAMDISK ; then
+ for i in 1 2 ; do
+ modprobe -r brd && break
+ sleep .1
+ udev_wait
+ done
+ fi
# NOTE: SCSI_DEBUG_DEV test must come before the LOOP test because
# prepare_scsi_debug_dev() also sets LOOP to short-circuit prepare_loop()
if test -f SCSI_DEBUG_DEV; then
udev_wait
test "${LVM_TEST_PARALLEL:-0}" -eq 1 || {
- if ! modprobe -r scsi_debug ; then
- sleep 1
- modprobe -r scsi_debug || true
- fi
+ for i in 1 2 ; do
+ modprobe -r scsi_debug && break
+ sleep .1
+ udev_wait
+ done
}
else
test ! -f LOOP || losetup -d "$(< LOOP)" || true
@@ -684,7 +689,7 @@ prepare_ramdisk() {
modprobe -r brd || return 0
echo -n "## preparing ramdisk device..."
- modprobe brd rd_size=$((size * 1024)) || return
+ modprobe brd rd_size=$((size * 1024)) rd_nr=1 || return
BACKING_DEV=/dev/ram0
echo "ok ($BACKING_DEV)"
1 year