master - tests: tune extend test
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=bb62af5b3db82e6558a...
Commit: bb62af5b3db82e6558afd564acd3bcc0f2b94b50
Parent: 676ce4775464dbc2efbcfe09951c55991dc5be3d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Sep 8 00:22:16 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
tests: tune extend test
For proper checking of extension progress require version 1.15
It looks with older versoin extension happens during very slow
resume within lvm command - although speed is still somewhat slow
with latest version.
---
test/shell/lvextend-raid.sh | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/test/shell/lvextend-raid.sh b/test/shell/lvextend-raid.sh
index abd4cc508..054f436ba 100644
--- a/test/shell/lvextend-raid.sh
+++ b/test/shell/lvextend-raid.sh
@@ -41,10 +41,14 @@ lvcreate -l1 $vg "$dev1"
lvcreate -l1 $vg "$dev2"
sector=$(( $(get first_extent_sector "$dev2") + 2048 ))
-aux delayzero_dev "$dev2" 0 50 "${sector}:"
+aux zero_dev "$dev1" "${sector}:"
+aux delayzero_dev "$dev2" 0 30 "${sector}:"
# Create raid1 LV consuming 1 MD bitmap page
lvcreate --yes --type raid1 --regionsize ${regionsize}K -L$(($lvsz-$lvext))M -n $lv1 $vg
+
+lvs -a $vg
+
not check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz-$lvext)).00m" $vg/$lv1
aux wait_for_sync $vg $lv1
@@ -52,16 +56,16 @@ check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 region_size "4.00k"
# to slow down extension - slowdown readings
-aux delayzero_dev "$dev1" 50 0 "${sector}:"
+aux delayzero_dev "$dev1" 100 0 "${sector}:"
+aux delayzero_dev "$dev2" 0 100 "${sector}:"
-dmsetup table
-dmsetup info -c
-dmsetup status
# Extend so that full MD bitmap page is consumed
-lvextend -vvvv -y -L+${lvext}M $vg/$lv1
+lvextend -y -L+${lvext}M $vg/$lv1
+if [ $v1_15_0 -eq 1 ]
+then
not check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz)).00m" $vg/$lv1
-lvs -a $vg
+fi
aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
@@ -73,11 +77,12 @@ then
else
check lv_field $vg/$lv1 sync_percent "100.00"
fi
-aux wait_for_sync $vg $lv1
-check lv_field $vg/$lv1 sync_percent "100.00"
-check lv_field $vg/$lv1 size "$(($lvsz+$lvext)).00m" $vg/$lv1
aux enable_dev "$dev1"
aux enable_dev "$dev2"
+aux wait_for_sync $vg $lv1
+check lv_field $vg/$lv1 sync_percent "100.00"
+check lv_field $vg/$lv1 size "$(($lvsz+$lvext)).00m" $vg/$lv1
+
vgremove -ff $vg
3 years, 8 months
master - tests: check for writecache being compiled in
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=676ce4775464dbc2efb...
Commit: 676ce4775464dbc2efbcfe09951c55991dc5be3d
Parent: 8dea63d30fd336051ec549d96c70abef6a9bfdec
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 4 21:08:32 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
tests: check for writecache being compiled in
---
test/shell/cache-single-usage.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/test/shell/cache-single-usage.sh b/test/shell/cache-single-usage.sh
index 8936aa3f1..9bc9b67c5 100644
--- a/test/shell/cache-single-usage.sh
+++ b/test/shell/cache-single-usage.sh
@@ -16,6 +16,9 @@ SKIP_WITH_LVMPOLLD=1
. lib/inittest
+lvm segtypes 2>/dev/null | grep writecache$ >/dev/null || {
+ skip 'Writecache is not built-in.'
+}
aux have_cache 1 10 0 || skip
which mkfs.xfs || skip
3 years, 8 months
master - tests: check for cache_version that supports v2
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8dea63d30fd336051ec...
Commit: 8dea63d30fd336051ec549d96c70abef6a9bfdec
Parent: ce5ea07411d57a2bd276d8d29e46ce30b957f657
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 4 20:35:55 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
tests: check for cache_version that supports v2
---
test/shell/cache-single-split.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/test/shell/cache-single-split.sh b/test/shell/cache-single-split.sh
index 7fc17867c..a6deb0dc9 100644
--- a/test/shell/cache-single-split.sh
+++ b/test/shell/cache-single-split.sh
@@ -48,6 +48,11 @@ mount_umount()
aux have_cache 1 10 0 || skip
which mkfs.xfs || skip
+case $(cache_check -V) in
+# support for v2 starts with version 0.7
+0.[0..6]*) skip 'At least version 0.7 of cache_check tool is needed.' ;;
+esac
+
mount_dir="mnt"
mkdir -p "$mount_dir"
3 years, 8 months
master - raid: do not enforce flushing of raids when it is not required
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=ce5ea07411d57a2bd27...
Commit: ce5ea07411d57a2bd276d8d29e46ce30b957f657
Parent: 3388e194892e9ab7a36b72e512796c2d218dae6e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Sep 8 21:09:06 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
raid: do not enforce flushing of raids when it is not required
This is probably somewhat experimantal patch - but when i.e. raid device
is just extend, there should not be a technical need for flush,
unless the target would stricly need it. It should allow faster
processing of lvm command not being blocked by possibly longer flush.
---
WHATS_NEW | 1 +
lib/activate/activate.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index aa3960b31..0aa23046d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.11 -
==================================
+ Allow raid extension without flushing raid LV first.
Use _rmeta and _rimage as origin only devices for table loading.
Switch code base to use flexible array syntax.
Fix 64bit math when calculation cachevol size.
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index 0c6bd1a9a..c5adc5065 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -2177,7 +2177,7 @@ static int _lv_suspend(struct cmd_context *cmd, const char *lvid_s,
* TODO: Relax this limiting condition further */
if (!flush_required &&
(lv_is_pvmove(lv) || pvmove_lv ||
- (!lv_is_mirror(lv) && !lv_is_thin_pool(lv) && !lv_is_thin_volume(lv)))) {
+ (!lv_is_raid(lv) && !lv_is_mirror(lv) && !lv_is_thin_pool(lv) && !lv_is_thin_volume(lv)))) {
log_debug("Requiring flush for LV %s.", display_lvname(lv));
flush_required = 1;
}
3 years, 8 months
master - raid: add _rimage and _rmeta as origin_only
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3388e194892e9ab7a36...
Commit: 3388e194892e9ab7a36b72e512796c2d218dae6e
Parent: 3e6bb772287a6d7f753b08780c7e913c98f5e307
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Sep 8 21:06:23 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
raid: add _rimage and _rmeta as origin_only
Since we do not support rimage & rmeta for snapshots - we can
avoid quering for -cow devices and add them as origin_only -
since their snapshots (-cow) could have never existed.
This redumes several ioctl operation during table preloading.
---
WHATS_NEW | 1 +
lib/activate/dev_manager.c | 5 +++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 1fffbb5d7..aa3960b31 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.11 -
==================================
+ Use _rmeta and _rimage as origin only devices for table loading.
Switch code base to use flexible array syntax.
Fix 64bit math when calculation cachevol size.
Preserve uint32_t for seqno handling.
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index a626b000a..e98cf578b 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -2642,10 +2642,11 @@ static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
/* origin only for cache without pending delete */
(!dm->track_pending_delete || !lv_is_cache(lv)) &&
!_add_lv_to_dtree(dm, dtree, seg_lv(seg, s),
- lv_is_vdo_pool(seg_lv(seg, s)) ? 1 : 0))
+ (lv_is_vdo_pool(seg_lv(seg, s)) ||
+ lv_is_raid_image(seg_lv(seg, s))) ? 1 : 0))
return_0;
if (seg_is_raid_with_meta(seg) && seg->meta_areas && seg_metalv(seg, s) &&
- !_add_lv_to_dtree(dm, dtree, seg_metalv(seg, s), 0))
+ !_add_lv_to_dtree(dm, dtree, seg_metalv(seg, s), 1))
return_0;
}
3 years, 8 months
master - lv_manip: add synchronization points
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3e6bb772287a6d7f753...
Commit: 3e6bb772287a6d7f753b08780c7e913c98f5e307
Parent: 8d6f1f9768da5a66b8f5153d13c96f50f411155f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Sep 8 15:20:50 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
lv_manip: add synchronization points
---
lib/metadata/lv_manip.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 284d0e52b..d72c49bea 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -7750,6 +7750,9 @@ out:
r = 0; /* Continue deactivating as many as possible. */
}
+ if (!sync_local_dev_names(vg->cmd))
+ log_debug("Failed to sync local device names after deactivation of wiped volumes.");
+
return r;
}
3 years, 8 months
master - lvconvert: flip return value of _raid_split_image_conversion
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8d6f1f9768da5a66b8f...
Commit: 8d6f1f9768da5a66b8f5153d13c96f50f411155f
Parent: dddf63ebc397705dc04a548c7a80ad9cad5ce4c2
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 4 20:55:02 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Sep 8 21:23:03 2020 +0200
lvconvert: flip return value of _raid_split_image_conversion
Use '0' for error and '1' as success.
Also drop INTERNAL_ERROR from path - as this error
is ATM used for invalid devices.
(i.e. test lvconvert-raid1-split-trackchanges.sh)
---
tools/lvconvert.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 0adc61e36..d420eb52f 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1167,7 +1167,7 @@ static int _raid_split_image_conversion(struct logical_volume *lv)
if (lv_is_raid_with_tracking(lv)) {
log_error("Conversion of tracking raid1 LV %s is not supported.",
display_lvname(lv));
- return 1;
+ return 0;
}
if (lv_is_raid_image(lv) &&
@@ -1175,19 +1175,19 @@ static int _raid_split_image_conversion(struct logical_volume *lv)
(void) dm_strncpy(raidlv_name, lv->name, s - lv->name);
if (!(tmp_lv = find_lv(lv->vg, raidlv_name))) {
- log_error(INTERNAL_ERROR "Failed to find RaidLV of RAID subvolume %s.",
+ log_error("Failed to find RaidLV of RAID subvolume %s.",
display_lvname(lv));
- return 1;
+ return 0;
}
if (lv_is_raid_with_tracking(tmp_lv)) {
log_error("Conversion of tracked raid1 subvolume %s is not supported.",
display_lvname(lv));
- return 1;
+ return 0;
}
}
- return 0;
+ return 1;
}
/*
@@ -1205,8 +1205,8 @@ static int _lvconvert_mirrors(struct cmd_context *cmd,
uint32_t new_mimage_count = 0;
uint32_t new_log_count = 0;
- if (_raid_split_image_conversion(lv))
- return 0;
+ if (!_raid_split_image_conversion(lv))
+ return_0;
if ((lp->corelog || lp->mirrorlog) && *lp->type_str && strcmp(lp->type_str, SEG_TYPE_NAME_MIRROR)) {
log_error("--corelog and --mirrorlog are only compatible with mirror devices.");
@@ -1321,8 +1321,8 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
struct cmd_context *cmd = lv->vg->cmd;
struct lv_segment *seg = first_seg(lv);
- if (_raid_split_image_conversion(lv))
- return 0;
+ if (!_raid_split_image_conversion(lv))
+ return_0;
if (_linear_type_requested(lp->type_str)) {
if (arg_is_set(cmd, mirrors_ARG) && (arg_uint_value(cmd, mirrors_ARG, 0) != 0)) {
@@ -2725,8 +2725,8 @@ static int _lvconvert_to_thin_with_external(struct cmd_context *cmd,
.virtual_extents = lv->le_count,
};
- if (_raid_split_image_conversion(lv))
- return 0;
+ if (!_raid_split_image_conversion(lv))
+ return_0;
if (lv == thinpool_lv) {
log_error("Can't use same LV %s for thin pool and thin volume.",
@@ -3037,8 +3037,8 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
struct id lockd_meta_id;
const char *str_seg_type = to_cachepool ? SEG_TYPE_NAME_CACHE_POOL : SEG_TYPE_NAME_THIN_POOL;
- if (_raid_split_image_conversion(lv))
- return 0;
+ if (!_raid_split_image_conversion(lv))
+ return_0;
if (lv_is_thin_pool(lv) || lv_is_cache_pool(lv)) {
log_error(INTERNAL_ERROR "LV %s is already a pool.", display_lvname(lv));
@@ -4463,7 +4463,7 @@ int lvconvert_cachevol_attach_single(struct cmd_context *cmd,
log_verbose("Redirecting operation to data sub LV %s.", display_lvname(lv));
}
- if (_raid_split_image_conversion(lv))
+ if (!_raid_split_image_conversion(lv))
goto_bad;
/* Attach the cache to the main LV. */
@@ -4580,7 +4580,7 @@ static int _lvconvert_cachepool_attach_single(struct cmd_context *cmd,
log_verbose("Redirecting operation to data sub LV %s.", display_lvname(lv));
}
- if (_raid_split_image_conversion(lv))
+ if (!_raid_split_image_conversion(lv))
goto_out;
/* Attach the cache to the main LV. */
3 years, 8 months
master - tests: fix pvck repair in hints.sh
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=dddf63ebc397705dc04...
Commit: dddf63ebc397705dc04a548c7a80ad9cad5ce4c2
Parent: 10fc3610c46be494c6d15c845b2b85a3ca955d79
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Fri Sep 4 11:22:42 2020 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Fri Sep 4 11:23:25 2020 -0500
tests: fix pvck repair in hints.sh
---
test/shell/hints.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/shell/hints.sh b/test/shell/hints.sh
index 176ee2176..5ac72282b 100644
--- a/test/shell/hints.sh
+++ b/test/shell/hints.sh
@@ -345,7 +345,7 @@ not diff $HINTS $PREV
rm $HINTS $PREV
pvs
cp $HINTS $PREV
-pvck --repairtype label_header -y "$dev5"
+pvck --repairtype label_header -y "$dev3"
cat $NEWHINTS
grep 'Created empty by pvck' $HINTS
# this next pvs creates new hints
3 years, 8 months
master - tests: use delayzero_dev
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=10fc3610c46be494c6d...
Commit: 10fc3610c46be494c6d15c845b2b85a3ca955d79
Parent: 76b1f43e812189ea325eed979786a07b4cf7d684
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 4 18:05:01 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri Sep 4 18:11:42 2020 +0200
tests: use delayzero_dev
Speed-up a bit the first synchronization with just 50ms write delay,
but later set also delay on read to slowdown lvextend.
FIXME: there are still things to look at:
0 229376 raid raid1 2 AA 229376/229376 idle 0 0
0 229376 raid raid1 2 AA 0/229376 frozen 0 0 -
0 262144 raid raid1 2 AA 229376/262144 repair 0 0 -
0 262144 raid raid1 2 AA 229376/262144 repair 0 0 -
0 262144 raid raid1 2 AA 245888/262144 repair 0 0 -
---
test/shell/lvextend-raid.sh | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/test/shell/lvextend-raid.sh b/test/shell/lvextend-raid.sh
index e38634ba7..abd4cc508 100644
--- a/test/shell/lvextend-raid.sh
+++ b/test/shell/lvextend-raid.sh
@@ -20,7 +20,7 @@ v1_15_0=0
aux have_raid 1 15 0 && v1_15_0=1
# Use smallest regionsize to save VG space
-regionsize=`getconf PAGESIZE` # in bytes
+regionsize=$(getconf PAGESIZE) # in bytes
let pageregions=regionsize*8 # number of regions per MD bitmap page
# in KiB
@@ -34,7 +34,14 @@ aux prepare_pvs 2 $(($lvsz + 3 * $lvext))
get_devs
vgcreate -s 4k $vg ${DEVICES[@]}
-aux delay_dev "$dev1" 0 150
+# Keep $dev1 & $dev2 always open via small active LVs.
+# This trick avoids race on system with scanning udev service
+# when device is 'in-use' and we cleared _rimage & _rmeta.
+lvcreate -l1 $vg "$dev1"
+lvcreate -l1 $vg "$dev2"
+
+sector=$(( $(get first_extent_sector "$dev2") + 2048 ))
+aux delayzero_dev "$dev2" 0 50 "${sector}:"
# Create raid1 LV consuming 1 MD bitmap page
lvcreate --yes --type raid1 --regionsize ${regionsize}K -L$(($lvsz-$lvext))M -n $lv1 $vg
@@ -44,10 +51,17 @@ aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 region_size "4.00k"
+# to slow down extension - slowdown readings
+aux delayzero_dev "$dev1" 50 0 "${sector}:"
+
+dmsetup table
+dmsetup info -c
+dmsetup status
# Extend so that full MD bitmap page is consumed
-lvextend -y -L+${lvext}M $vg/$lv1
+lvextend -vvvv -y -L+${lvext}M $vg/$lv1
not check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz)).00m" $vg/$lv1
+lvs -a $vg
aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
@@ -63,4 +77,7 @@ aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz+$lvext)).00m" $vg/$lv1
+aux enable_dev "$dev1"
+aux enable_dev "$dev2"
+
vgremove -ff $vg
3 years, 8 months
master - tests: add aux delayzero_dev support
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=76b1f43e812189ea325...
Commit: 76b1f43e812189ea325eed979786a07b4cf7d684
Parent: d8bb85d9638e1b0cad96c654a1e4a61b6d33aa97
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 4 13:50:05 2020 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri Sep 4 18:11:42 2020 +0200
tests: add aux delayzero_dev support
Just like we have 'writeerror_dev' supporting creation of device
which 'readable' segment and segments where write will fail we
have now support for delay zero mappings.
This is useful if we want to 'fake' large writing areas where we do
not really care about the actual 'disk' content - since we test
operation logic and it doesn't matter we read and write zeroes.
With combination with 'delay' target we can create specific mappings
and avoid using large memory areas of ramdisk.
---
test/lib/aux.sh | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index 17e7935ee..d5509a763 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -517,6 +517,7 @@ teardown() {
unset LVM_LOG_FILE_EPOCH
test ! -f ERR_DEV || should dmsetup remove $(cat ERR_DEV_NAME)
+ test ! -f ZERO_DEV || should dmsetup remove $(cat ZERO_DEV_NAME)
if test -f TESTNAME ; then
@@ -926,6 +927,11 @@ common_dev_() {
}
shift 2
;;
+ delayzero)
+ shift 2
+ # zero delay is just equivalent to 'zero_dev'
+ test "$read_ms" -eq 0 && test "$write_ms" -eq 0 && tgtype="zero"
+ ;;
# error|zero target does not take read_ms & write_ms only offset list
esac
@@ -958,6 +964,8 @@ common_dev_() {
echo "$from $len delay $pvdev $(( pos + offset )) $read_ms $pvdev $(( pos + offset )) $write_ms" ;;
writeerror)
echo "$from $len delay $pvdev $(( pos + offset )) 0 $(cat ERR_DEV) 0 0" ;;
+ delayzero)
+ echo "$from $len delay $(cat ZERO_DEV) 0 $read_ms $(cat ZERO_DEV) 0 $write_ms" ;;
error|zero)
echo "$from $len $tgtype" ;;
esac
@@ -1108,6 +1116,29 @@ writeerror_dev() {
common_dev_ writeerror "$@"
}
+#
+# Convert device to device with sections of delayed zero read and writes.
+# For this 'delay' dev will use extra new TEST-zerodev (huge zero target)
+# and reroutes reads and writes
+# i.e. delayzero_dev "$dev1" 8:32
+delayzero_dev() {
+ local name=${PREFIX}-zerodev
+
+ if test ! -e ZERO_DEV; then
+ # delay target is used for error mapping
+ if test ! -f HAVE_DM_DELAY ; then
+ target_at_least dm-delay 1 1 0 || return 0
+ touch HAVE_DM_DELAY
+ fi
+ dmsetup create -u "TEST-$name" "$name" --table "0 4611686018427387904 zero"
+ # Take major:minor of our error device
+ echo "$name" > ZERO_DEV_NAME
+ dmsetup info -c --noheadings -o major,minor "$name" > ZERO_DEV
+ fi
+
+ common_dev_ delayzero "$@"
+}
+
#
# Convert existing device to a device with zero segments
# Takes the list of pairs of zero segment from:len
3 years, 8 months