* LVM2 test breakage
@ 2025-05-16 16:00 Mikulas Patocka
2025-05-19 1:11 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-16 16:00 UTC (permalink / raw)
To: Yu Kuai, Song Liu; +Cc: zkabelac, linux-raid, dm-devel
Hi
The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
shell/lvcreate-large-raid.sh in the lvm2 testsuite.
The breakage is caused by removing the line "read_bio->bi_opf = op |
do_sync;"
Mikulas
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-16 16:00 LVM2 test breakage Mikulas Patocka
@ 2025-05-19 1:11 ` Yu Kuai
2025-05-19 6:41 ` Yu Kuai
2025-05-19 10:08 ` Mikulas Patocka
0 siblings, 2 replies; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 1:11 UTC (permalink / raw)
To: Mikulas Patocka, Song Liu; +Cc: zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/17 0:00, Mikulas Patocka 写道:
> Hi
>
> The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
> shell/lvcreate-large-raid.sh in the lvm2 testsuite.
>
> The breakage is caused by removing the line "read_bio->bi_opf = op |
> do_sync;"
>
Sorry that I don't undertand here, before the patch:
op = bio_op(bio);
do_sync = bio->bi_opf & REQ_SYNC;
read_bio->bi_opf = op | do_sync
after the patch:
read_bio = bio_alloc_clone(, bio, ...)
read_bio->bi_opf = bio->bi_opf
So, after the patch, other than bio_op() and REQ_SYNC, other bio flags
are keeped, I don't see problem for now, I'll run the test later.
Thanks,
Kuai
> Mikulas
>
>
> .
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-19 1:11 ` Yu Kuai
@ 2025-05-19 6:41 ` Yu Kuai
2025-05-19 10:10 ` Mikulas Patocka
2025-05-19 10:08 ` Mikulas Patocka
1 sibling, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 6:41 UTC (permalink / raw)
To: Yu Kuai, Mikulas Patocka, Song Liu
Cc: zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 9:11, Yu Kuai 写道:
> Hi,
>
> 在 2025/05/17 0:00, Mikulas Patocka 写道:
>> Hi
>>
>> The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
>> shell/lvcreate-large-raid.sh in the lvm2 testsuite.
>>
>> The breakage is caused by removing the line "read_bio->bi_opf = op |
>> do_sync;"
>>
>
> Sorry that I don't undertand here, before the patch:
>
> op = bio_op(bio);
> do_sync = bio->bi_opf & REQ_SYNC;
> read_bio->bi_opf = op | do_sync
>
> after the patch:
>
> read_bio = bio_alloc_clone(, bio, ...)
> read_bio->bi_opf = bio->bi_opf
>
> So, after the patch, other than bio_op() and REQ_SYNC, other bio flags
> are keeped, I don't see problem for now, I'll run the test later.
>
Do I need some special setup to run this test? I got following
result in my VM, and I don't understand why it failed.
Thanks,
Kuai
[root@fedora ~]# cat
lvm2/test/results/ndev-vanilla\:shell_lvcreate-large-raid.sh.txt
[ 0:00.290] Library version: 1.02.199-git (2024-05-16)
[ 0:00.290] Driver version: 4.50.0
[ 0:00.290] Kernel is Linux fedora
6.15.0-rc6-next-20250516-00001-ge4a42bdb48e2 #1064 SMP PREEMPT_DYNAMIC
Mon May 19 14:18:47 CST 2025 x86_64 x86_64 x86_64 GNU/Linux
[ 0:00.351] Selinux mode is Disabled.
[ 0:00.365] total used free shared
buff/cache available
[ 0:00.384] Mem: 257561 576 256529 0
455 255165
[ 0:00.384] Swap: 0 0 0
[ 0:00.384] Filesystem Size Used Avail Use% Mounted on
[ 0:00.402] /dev/root 20G 18G 3.0G 86% /
[ 0:00.402] devtmpfs 126G 0 126G 0% /dev
[ 0:00.402] tmpfs 126G 0 126G 0% /dev/shm
[ 0:00.402] tmpfs 51G 952K 51G 1% /run
[ 0:00.402] tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
[ 0:00.402] tmpfs 126G 0 126G 0% /tmp
[ 0:00.402] modules 14T 13T 1.4T 91% /tmp/modules
[ 0:00.402] tmpfs 26G 0 26G 0% /run/user/0
[ 0:00.402] /dev/nvme0n1 98G 56K 93G 1% /mnt/test
[ 0:00.402] @TESTDIR=/mnt/test/LVMTEST8522.QQ9T6A2cUU
[ 0:00.404] @PREFIX=LVMTEST8522
[ 0:00.404] ## DATE: Mon May 19 06:26:54 UTC 2025
[ 0:00.419] ## HOST: 192.168.8.196
[ 0:00.429] ## LVMCONF: activation {
[ 0:00.598] ## LVMCONF: checks = 1
[ 0:00.598] ## LVMCONF: monitoring = 0
[ 0:00.598] ## LVMCONF: polling_interval = 1
[ 0:00.598] ## LVMCONF: raid_region_size = 512
[ 0:00.598] ## LVMCONF: retry_deactivation = 1
[ 0:00.598] ## LVMCONF: snapshot_autoextend_percent = 50
[ 0:00.598] ## LVMCONF: snapshot_autoextend_threshold = 50
[ 0:00.598] ## LVMCONF: udev_rules = 1
[ 0:00.598] ## LVMCONF: udev_sync = 1
[ 0:00.598] ## LVMCONF: verify_udev_operations = 1
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: allocation {
[ 0:00.598] ## LVMCONF: vdo_slab_size_mb = 128
[ 0:00.598] ## LVMCONF: wipe_signatures_when_zeroing_new_lvs = 0
[ 0:00.598] ## LVMCONF: zero_metadata = 0
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: backup {
[ 0:00.598] ## LVMCONF: archive = 0
[ 0:00.598] ## LVMCONF: backup = 0
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: devices {
[ 0:00.598] ## LVMCONF: cache_dir =
"/mnt/test/LVMTEST8522.QQ9T6A2cUU/etc"
[ 0:00.598] ## LVMCONF: default_data_alignment = 1
[ 0:00.598] ## LVMCONF: dir = "/mnt/test/LVMTEST8522.QQ9T6A2cUU/dev"
[ 0:00.598] ## LVMCONF: filter = "a|.*|"
[ 0:00.598] ## LVMCONF: global_filter = [
"a|/mnt/test/LVMTEST8522.QQ9T6A2cUU/dev/mapper/LVMTEST8522.*pv[0-9_]*$|",
"r|.*|" ]
[ 0:00.598] ## LVMCONF: md_component_detection = 0
[ 0:00.598] ## LVMCONF: scan = "/mnt/test/LVMTEST8522.QQ9T6A2cUU/dev"
[ 0:00.598] ## LVMCONF: sysfs_scan = 1
[ 0:00.598] ## LVMCONF: use_devicesfile = 0
[ 0:00.598] ## LVMCONF: write_cache_state = 0
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: dmeventd {
[ 0:00.598] ## LVMCONF: executable = "/root/lvm2/test/lib/dmeventd"
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: global {
[ 0:00.598] ## LVMCONF: abort_on_internal_errors = 1
[ 0:00.598] ## LVMCONF: cache_check_executable = "/usr/sbin/cache_check"
[ 0:00.598] ## LVMCONF: cache_dump_executable = "/usr/sbin/cache_dump"
[ 0:00.598] ## LVMCONF: cache_repair_executable =
"/usr/sbin/cache_repair"
[ 0:00.598] ## LVMCONF: cache_restore_executable =
"/usr/sbin/cache_restore"
[ 0:00.598] ## LVMCONF: detect_internal_vg_cache_corruption = 1
[ 0:00.598] ## LVMCONF: etc = "/mnt/test/LVMTEST8522.QQ9T6A2cUU/etc"
[ 0:00.598] ## LVMCONF: event_activation = 1
[ 0:00.598] ## LVMCONF: fallback_to_local_locking = 0
[ 0:00.598] ## LVMCONF: fsadm_executable = "/root/lvm2/test/lib/fsadm"
[ 0:00.598] ## LVMCONF: library_dir =
"/mnt/test/LVMTEST8522.QQ9T6A2cUU/lib"
[ 0:00.598] ## LVMCONF: locking_dir =
"/mnt/test/LVMTEST8522.QQ9T6A2cUU/var/lock/lvm"
[ 0:00.598] ## LVMCONF: locking_type=1
[ 0:00.598] ## LVMCONF: notify_dbus = 0
[ 0:00.598] ## LVMCONF: si_unit_consistency = 1
[ 0:00.598] ## LVMCONF: thin_check_executable = "/usr/sbin/thin_check"
[ 0:00.598] ## LVMCONF: thin_dump_executable = "/usr/sbin/thin_dump"
[ 0:00.598] ## LVMCONF: thin_repair_executable = "/usr/sbin/thin_repair"
[ 0:00.598] ## LVMCONF: thin_restore_executable =
"/usr/sbin/thin_restore"
[ 0:00.598] ## LVMCONF: use_lvmlockd = 0
[ 0:00.598] ## LVMCONF: use_lvmpolld = 0
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] ## LVMCONF: log {
[ 0:00.598] ## LVMCONF: activation = 1
[ 0:00.598] ## LVMCONF: file =
"/mnt/test/LVMTEST8522.QQ9T6A2cUU/debug.log"
[ 0:00.598] ## LVMCONF: indent = 1
[ 0:00.598] ## LVMCONF: level = 9
[ 0:00.598] ## LVMCONF: overwrite = 1
[ 0:00.598] ## LVMCONF: syslog = 0
[ 0:00.598] ## LVMCONF: verbose = 0
[ 0:00.598] ## LVMCONF: }
[ 0:00.598] <======== Processing test: "lvcreate-large-raid.sh" ========>
[ 0:00.612]
[ 0:00.613] # FIXME update test to make something useful on <16T
[ 0:00.613] aux can_use_16T || skip
[ 0:00.613] #lvcreate-large-raid.sh:21+ aux can_use_16T
[ 0:00.613]
[ 0:00.688] aux have_raid 1 3 0 || skip
[ 0:00.688] #lvcreate-large-raid.sh:23+ aux have_raid 1 3 0
[ 0:00.688] v1_9_0=0
[ 0:00.867] #lvcreate-large-raid.sh:24+ v1_9_0=0
[ 0:00.867] aux have_raid 1 9 0 && v1_9_0=1
[ 0:00.867] #lvcreate-large-raid.sh:25+ aux have_raid 1 9 0
[ 0:00.867] #lvcreate-large-raid.sh:25+ v1_9_0=1
[ 0:01.082]
[ 0:01.083] segtypes="raid5"
[ 0:01.083] #lvcreate-large-raid.sh:27+ segtypes=raid5
[ 0:01.083] aux have_raid4 && segtypes="raid4 raid5"
[ 0:01.083] #lvcreate-large-raid.sh:28+ aux have_raid4
[ 0:01.083] #lvcreate-large-raid.sh:28+ segtypes='raid4 raid5'
[ 0:01.500]
[ 0:01.500] # Prepare 5x ~1P sized devices
[ 0:01.500] aux prepare_pvs 5 1000000000
[ 0:01.500] #lvcreate-large-raid.sh:31+ aux prepare_pvs 5 1000000000
[ 0:01.500] ## preparing loop device....set +vx; STACKTRACE; set -vx
[ 0:01.709] ##lvcreate-large-raid.sh:31+ set +vx
[ 0:01.709] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:31
[ 0:01.710] ## 1 STACKTRACE() called from
/root/lvm2/test/shell/lvcreate-large-raid.sh:31
[ 0:01.710] <======== Free space ========>
[ 0:02.310] ## DF_H: Filesystem Size Used Avail Use% Mounted on
[ 0:02.335] ## DF_H: /dev/root 20G 18G 3.0G 86% /
[ 0:02.335] ## DF_H: devtmpfs 126G 0 126G 0% /dev
[ 0:02.335] ## DF_H: tmpfs 126G 0 126G 0% /dev/shm
[ 0:02.335] ## DF_H: tmpfs 51G 952K 51G 1% /run
[ 0:02.335] ## DF_H: tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
[ 0:02.335] ## DF_H: tmpfs 126G 0 126G 0% /tmp
[ 0:02.335] ## DF_H: modules 14T 13T 1.4T 91% /tmp/modules
[ 0:02.335] ## DF_H: tmpfs 26G 0 26G 0% /run/user/0
[ 0:02.335] ## DF_H: /dev/nvme0n1 98G 64K 93G 1% /mnt/test
[ 0:02.335] <======== Script file "lvcreate-large-raid.sh" ========>
[ 0:02.345] ## Line: 1 #!/usr/bin/env bash
[ 0:02.384] ## Line: 2
[ 0:02.384] ## Line: 3 # Copyright (C) 2012,2016 Red Hat, Inc. All
rights reserved.
[ 0:02.384] ## Line: 4 #
[ 0:02.384] ## Line: 5 # This copyrighted material is made available
to anyone wishing to use,
[ 0:02.384] ## Line: 6 # modify, copy, or redistribute it subject to
the terms and conditions
[ 0:02.384] ## Line: 7 # of the GNU General Public License v.2.
[ 0:02.384] ## Line: 8 #
[ 0:02.384] ## Line: 9 # You should have received a copy of the GNU
General Public License
[ 0:02.384] ## Line: 10 # along with this program; if not,
write to the Free Software Foundation,
[ 0:02.384] ## Line: 11 # Inc., 51 Franklin Street, Fifth
Floor, Boston, MA 02110-1301 USA
[ 0:02.384] ## Line: 12
[ 0:02.384] ## Line: 13 # 'Exercise some lvcreate diagnostics'
[ 0:02.384] ## Line: 14
[ 0:02.384] ## Line: 15
[ 0:02.384] ## Line: 16 SKIP_WITH_LVMPOLLD=1
[ 0:02.384] ## Line: 17
[ 0:02.384] ## Line: 18 . lib/inittest
[ 0:02.384] ## Line: 19
[ 0:02.384] ## Line: 20 # FIXME update test to make something
useful on <16T
[ 0:02.384] ## Line: 21 aux can_use_16T || skip
[ 0:02.384] ## Line: 22
[ 0:02.384] ## Line: 23 aux have_raid 1 3 0 || skip
[ 0:02.384] ## Line: 24 v1_9_0=0
[ 0:02.384] ## Line: 25 aux have_raid 1 9 0 && v1_9_0=1
[ 0:02.384] ## Line: 26
[ 0:02.384] ## Line: 27 segtypes="raid5"
[ 0:02.384] ## Line: 28 aux have_raid4 && segtypes="raid4 raid5"
[ 0:02.384] ## Line: 29
[ 0:02.384] ## Line: 30 # Prepare 5x ~1P sized devices
[ 0:02.384] ## Line: 31 aux prepare_pvs 5 1000000000
[ 0:02.384] ## Line: 32 get_devs
[ 0:02.384] ## Line: 33
[ 0:02.384] ## Line: 34 vgcreate $SHARED "$vg1" "${DEVICES[@]}"
[ 0:02.384] ## Line: 35
[ 0:02.384] ## Line: 36 aux lvmconf 'devices/issue_discards = 1'
[ 0:02.384] ## Line: 37
[ 0:02.384] ## Line: 38 # Delay PVs so that resynchronization
doesn't fill too much space
[ 0:02.384] ## Line: 39 for device in "${DEVICES[@]}"
[ 0:02.384] ## Line: 40 do
[ 0:02.384] ## Line: 41 aux zero_dev "$device" "$((
$(get first_extent_sector "$device") + 8192 )):"
[ 0:02.384] ## Line: 42 done
[ 0:02.384] ## Line: 43
[ 0:02.384] ## Line: 44 # bz837927 START
[ 0:02.384] ## Line: 45
[ 0:02.384] ## Line: 46 #
[ 0:02.384] ## Line: 47 # Create large RAID LVs
[ 0:02.384] ## Line: 48 #
[ 0:02.384] ## Line: 49
[ 0:02.384] ## Line: 50 # 200 TiB raid1
[ 0:02.384] ## Line: 51 lvcreate --type raid1 -m 1 -L 200T -n
$lv1 $vg1 --nosync
[ 0:02.384] ## Line: 52 check lv_field $vg1/$lv1 size "200.00t"
[ 0:02.384] ## Line: 53 check raid_leg_status $vg1 $lv1 "AA"
[ 0:02.384] ## Line: 54 lvremove -ff $vg1
[ 0:02.384] ## Line: 55
[ 0:02.384] ## Line: 56 # 1 PiB raid1
[ 0:02.384] ## Line: 57 lvcreate --type raid1 -m 1 -L 1P -n
$lv1 $vg1 --nosync
[ 0:02.384] ## Line: 58 check lv_field $vg1/$lv1 size "1.00p"
[ 0:02.384] ## Line: 59 check raid_leg_status $vg1 $lv1 "AA"
[ 0:02.384] ## Line: 60 lvremove -ff $vg1
[ 0:02.384] ## Line: 61
[ 0:02.384] ## Line: 62 # 750 TiB raid4/5
[ 0:02.384] ## Line: 63 for segtype in $segtypes; do
[ 0:02.384] ## Line: 64 lvcreate --type $segtype -i 3
-L 750T -n $lv1 $vg1 --nosync
[ 0:02.384] ## Line: 65 check lv_field $vg1/$lv1 size
"750.00t"
[ 0:02.384] ## Line: 66 check raid_leg_status $vg1 $lv1
"AAAA"
[ 0:02.384] ## Line: 67 lvremove -ff $vg1
[ 0:02.384] ## Line: 68 done
[ 0:02.384] ## Line: 69
[ 0:02.384] ## Line: 70 #
[ 0:02.384] ## Line: 71 # Extending large 200 TiB RAID LV to
400 TiB (belong in different script?)
[ 0:02.384] ## Line: 72 #
[ 0:02.384] ## Line: 73 lvcreate --type raid1 -m 1 -L 200T -n
$lv1 $vg1 --nosync
[ 0:02.384] ## Line: 74 check lv_field $vg1/$lv1 size "200.00t"
[ 0:02.384] ## Line: 75 check raid_leg_status $vg1 $lv1 "AA"
[ 0:02.384] ## Line: 76 lvextend -L +200T $vg1/$lv1
[ 0:02.384] ## Line: 77 check lv_field $vg1/$lv1 size "400.00t"
[ 0:02.384] ## Line: 78 check raid_leg_status $vg1 $lv1 "AA"
[ 0:02.384] ## Line: 79 lvremove -ff $vg1
[ 0:02.384] ## Line: 80
[ 0:02.384] ## Line: 81
[ 0:02.384] ## Line: 82 # Check --nosync is rejected for raid6
[ 0:02.384] ## Line: 83 if [ $v1_9_0 -eq 1 ] ; then
[ 0:02.384] ## Line: 84 not lvcreate --type raid6 -i 3
-L 750T -n $lv1 $vg1 --nosync
[ 0:02.384] ## Line: 85 fi
[ 0:02.384] ## Line: 86
[ 0:02.384] ## Line: 87 # 750 TiB raid6
[ 0:02.384] ## Line: 88 lvcreate --type raid6 -i 3 -L 750T -n
$lv1 $vg1
[ 0:02.384] ## Line: 89 check lv_field $vg1/$lv1 size "750.00t"
[ 0:02.384] ## Line: 90 check raid_leg_status $vg1 $lv1 "aaaaa"
[ 0:02.384] ## Line: 91 lvremove -ff $vg1
[ 0:02.384] ## Line: 92
[ 0:02.384] ## Line: 93 # 1 PiB raid6, then extend up to 2 PiB
[ 0:02.384] ## Line: 94 lvcreate --type raid6 -i 3 -L 1P -n
$lv1 $vg1
[ 0:02.384] ## Line: 95 check lv_field $vg1/$lv1 size "1.00p"
[ 0:02.384] ## Line: 96 check raid_leg_status $vg1 $lv1 "aaaaa"
[ 0:02.384] ## Line: 97 lvextend -L +1P $vg1/$lv1
[ 0:02.384] ## Line: 98 check lv_field $vg1/$lv1 size "2.00p"
[ 0:02.384] ## Line: 99 check raid_leg_status $vg1 $lv1 "aaaaa"
[ 0:02.384] ## Line: 100 lvremove -ff $vg1
[ 0:02.384] ## Line: 101
[ 0:02.384] ## Line: 102 #
[ 0:02.384] ## Line: 103 # Convert large 200 TiB linear to RAID1
(belong in different test script?)
[ 0:02.384] ## Line: 104 #
[ 0:02.384] ## Line: 105 lvcreate -aey -L 200T -n $lv1 $vg1
[ 0:02.384] ## Line: 106 lvconvert -y --type raid1 -m 1 $vg1/$lv1
[ 0:02.384] ## Line: 107 check lv_field $vg1/$lv1 size "200.00t"
[ 0:02.384] ## Line: 108 if [ $v1_9_0 -eq 1 ] ; then
[ 0:02.384] ## Line: 109 # The 1.9.0 version of dm-raid
is capable of performing
[ 0:02.384] ## Line: 110 # linear -> RAID1 upconverts as
"recover" not "resync"
[ 0:02.384] ## Line: 111 # The LVM code now checks the
dm-raid version when
[ 0:02.384] ## Line: 112 # upconverting and if 1.9.0+ is
found, it uses "recover"
[ 0:02.384] ## Line: 113 check raid_leg_status $vg1 $lv1 "Aa"
[ 0:02.384] ## Line: 114 else
[ 0:02.384] ## Line: 115 check raid_leg_status $vg1 $lv1 "aa"
[ 0:02.384] ## Line: 116 fi
[ 0:02.384] ## Line: 117 lvremove -ff $vg1
[ 0:02.384] ## Line: 118
[ 0:02.384] ## Line: 119 # bz837927 END
[ 0:02.384] ## Line: 120
[ 0:02.384] ## Line: 121 vgremove -ff $vg1
[ 0:02.384] aux teardown
[ 0:02.394] #lvcreate-large-raid.sh:1+ aux teardown
[ 0:02.394] ## teardown.........ok
> Thanks,
> Kuai
>
>> Mikulas
>>
>>
>> .
>>
>
> .
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-19 1:11 ` Yu Kuai
2025-05-19 6:41 ` Yu Kuai
@ 2025-05-19 10:08 ` Mikulas Patocka
2025-05-19 10:09 ` [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag Mikulas Patocka
1 sibling, 1 reply; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-19 10:08 UTC (permalink / raw)
To: Yu Kuai; +Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
[-- Attachment #1: Type: text/plain, Size: 920 bytes --]
On Mon, 19 May 2025, Yu Kuai wrote:
> Hi,
>
> 在 2025/05/17 0:00, Mikulas Patocka 写道:
> > Hi
> >
> > The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
> > shell/lvcreate-large-raid.sh in the lvm2 testsuite.
> >
> > The breakage is caused by removing the line "read_bio->bi_opf = op |
> > do_sync;"
> >
>
> Sorry that I don't undertand here, before the patch:
>
> op = bio_op(bio);
> do_sync = bio->bi_opf & REQ_SYNC;
> read_bio->bi_opf = op | do_sync
>
> after the patch:
>
> read_bio = bio_alloc_clone(, bio, ...)
> read_bio->bi_opf = bio->bi_opf
>
> So, after the patch, other than bio_op() and REQ_SYNC, other bio flags
> are keeped, I don't see problem for now, I'll run the test later.
>
> Thanks,
> Kuai
The problem is caused by the REQ_RAHEAD flag - bios with this flag may
fail anytime. I presume that the bug is caused by raid1 mishandling this
failure.
Mikulas
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 10:08 ` Mikulas Patocka
@ 2025-05-19 10:09 ` Mikulas Patocka
2025-05-19 11:19 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-19 10:09 UTC (permalink / raw)
To: Yu Kuai; +Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks
the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and
raid10 to pass down all the flags from the incoming bio. The problem is
when we pass down the REQ_RAHEAD flag - bios with this flag may fail
anytime and md-raid is not prepared to handle this failure.
This commit fixes the code, so that the REQ_RAHEAD flag is not passed
down.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Fixes: e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags")
---
drivers/md/raid1.c | 1 +
drivers/md/raid10.c | 1 +
2 files changed, 2 insertions(+)
Index: linux-2.6/drivers/md/raid1.c
===================================================================
--- linux-2.6.orig/drivers/md/raid1.c
+++ linux-2.6/drivers/md/raid1.c
@@ -1404,6 +1404,7 @@ static void raid1_read_request(struct md
read_bio->bi_iter.bi_sector = r1_bio->sector +
mirror->rdev->data_offset;
read_bio->bi_end_io = raid1_end_read_request;
+ read_bio->bi_opf &= ~REQ_RAHEAD;
if (test_bit(FailFast, &mirror->rdev->flags) &&
test_bit(R1BIO_FailFast, &r1_bio->state))
read_bio->bi_opf |= MD_FAILFAST;
Index: linux-2.6/drivers/md/raid10.c
===================================================================
--- linux-2.6.orig/drivers/md/raid10.c
+++ linux-2.6/drivers/md/raid10.c
@@ -1263,6 +1263,7 @@ static void raid10_write_one_disk(struct
mbio->bi_iter.bi_sector = (r10_bio->devs[n_copy].addr +
choose_data_offset(r10_bio, rdev));
mbio->bi_end_io = raid10_end_write_request;
+ mbio->bi_opf &= ~REQ_RAHEAD;
if (!replacement && test_bit(FailFast,
&conf->mirrors[devnum].rdev->flags)
&& enough(conf, devnum))
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-19 6:41 ` Yu Kuai
@ 2025-05-19 10:10 ` Mikulas Patocka
[not found] ` <81c5847a-cfd8-4f9f-892c-62cca3d17e63@redhat.com>
0 siblings, 1 reply; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-19 10:10 UTC (permalink / raw)
To: Yu Kuai; +Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
[-- Attachment #1: Type: text/plain, Size: 1038 bytes --]
On Mon, 19 May 2025, Yu Kuai wrote:
> Hi,
>
> 在 2025/05/19 9:11, Yu Kuai 写道:
> > Hi,
> >
> > 在 2025/05/17 0:00, Mikulas Patocka 写道:
> > > Hi
> > >
> > > The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
> > > shell/lvcreate-large-raid.sh in the lvm2 testsuite.
> > >
> > > The breakage is caused by removing the line "read_bio->bi_opf = op |
> > > do_sync;"
> > >
> >
> > Sorry that I don't undertand here, before the patch:
> >
> > op = bio_op(bio);
> > do_sync = bio->bi_opf & REQ_SYNC;
> > read_bio->bi_opf = op | do_sync
> >
> > after the patch:
> >
> > read_bio = bio_alloc_clone(, bio, ...)
> > read_bio->bi_opf = bio->bi_opf
> >
> > So, after the patch, other than bio_op() and REQ_SYNC, other bio flags
> > are keeped, I don't see problem for now, I'll run the test later.
> >
>
> Do I need some special setup to run this test? I got following
> result in my VM, and I don't understand why it failed.
>
> Thanks,
> Kuai
Ask Zdenek Kabelac - he is expert in the testsuite.
Mikulas
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
[not found] ` <81c5847a-cfd8-4f9f-892c-62cca3d17e63@redhat.com>
@ 2025-05-19 11:07 ` Yu Kuai
2025-05-19 13:55 ` Zdenek Kabelac
0 siblings, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 11:07 UTC (permalink / raw)
To: Zdenek Kabelac, Mikulas Patocka, Yu Kuai
Cc: Song Liu, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 18:45, Zdenek Kabelac 写道:
> Dne 19. 05. 25 v 12:10 Mikulas Patocka napsal(a):
>> On Mon, 19 May 2025, Yu Kuai wrote:
>>
>>> Hi,
>>>
>>> 在 2025/05/19 9:11, Yu Kuai 写道:
>>>> Hi,
>>>>
>>>> 在 2025/05/17 0:00, Mikulas Patocka 写道:
>>>>> Hi
>>>>>
>>>>> The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
>>>>> shell/lvcreate-large-raid.sh in the lvm2 testsuite.
>>>>>
>>>>> The breakage is caused by removing the line "read_bio->bi_opf = op |
>>>>> do_sync;"
>>>>>
>>> Do I need some special setup to run this test? I got following
>>> result in my VM, and I don't understand why it failed.
>>>
>>> Ask Zdenek Kabelac - he is expert in the testsuite.
>>>
>>> Mikulas
>
>
> Hi
>
>
> Lvm2 test suite is creating 'virtual' disk setup - it usually tries
> first build something with 'brd' - if this device is 'in-use' it
> fallback to create some files in LVM_TEST_DIR.
>
> This dir however must allow creation of device - by default nowdays
> /dev/shm & /tmp are mounted with 'nodev' mount option.
>
> So a dir which does allow dev creation must be passed to the test - so
> either remount dir without 'nodev' or set LVM_TEST_DIR to the filesystem
> which allows creation of devices.
Yes, I know that, and I set LVM_TEST_DIR to a new mounted nvme, as use
can see in the attached log:
[ 0:02.335] ## DF_H: /dev/nvme0n1 98G 64K 93G 1% /mnt/test
>
> In 'lvm2/test' run 'make help' to see all possible settings - useful
> one could be LVM_TEST_AUX_TRACE to expose shell traces from test
> internals - helps with debugging...
The log do have shell trace, I think, it stoped here, I just don't know
why :(
[ 0:01.709] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:31
[ 0:01.710] ## 1 STACKTRACE() called from
/root/lvm2/test/shell/lvcreate-large-raid.sh:31
Thanks,
Kuai
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 10:09 ` [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag Mikulas Patocka
@ 2025-05-19 11:19 ` Yu Kuai
2025-05-19 11:39 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 11:19 UTC (permalink / raw)
To: Mikulas Patocka, Yu Kuai
Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 18:09, Mikulas Patocka 写道:
> The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks
> the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and
> raid10 to pass down all the flags from the incoming bio. The problem is
> when we pass down the REQ_RAHEAD flag - bios with this flag may fail
> anytime and md-raid is not prepared to handle this failure.
Can dm-raid handle this falg? At least from md-raid array, for read
ahead IO, it doesn't make sense to kill that flag.
If we want to fall back to old behavior, can we kill that flag from
dm-raid?
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 127138c61be5..ca7fb1713117 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -3353,6 +3353,11 @@ static int raid_map(struct dm_target *ti, struct
bio *bio)
if (unlikely(bio_has_data(bio) && bio_end_sector(bio) >
mddev->array_sectors))
return DM_MAPIO_REQUEUE;
+ /*
+ * bios with this flag may fail anytime, dm-raid is not prepared to
+ * handle failure.
+ */
+ bio->bi_opf &= ~REQ_RAHEAD;
if (unlikely(!md_handle_request(mddev, bio)))
return DM_MAPIO_REQUEUE;
Thanks,
Kuai
>
> This commit fixes the code, so that the REQ_RAHEAD flag is not passed
> down.
>
> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
> Fixes: e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags")
>
> ---
> drivers/md/raid1.c | 1 +
> drivers/md/raid10.c | 1 +
> 2 files changed, 2 insertions(+)
>
> Index: linux-2.6/drivers/md/raid1.c
> ===================================================================
> --- linux-2.6.orig/drivers/md/raid1.c
> +++ linux-2.6/drivers/md/raid1.c
> @@ -1404,6 +1404,7 @@ static void raid1_read_request(struct md
> read_bio->bi_iter.bi_sector = r1_bio->sector +
> mirror->rdev->data_offset;
> read_bio->bi_end_io = raid1_end_read_request;
> + read_bio->bi_opf &= ~REQ_RAHEAD;
> if (test_bit(FailFast, &mirror->rdev->flags) &&
> test_bit(R1BIO_FailFast, &r1_bio->state))
> read_bio->bi_opf |= MD_FAILFAST;
> Index: linux-2.6/drivers/md/raid10.c
> ===================================================================
> --- linux-2.6.orig/drivers/md/raid10.c
> +++ linux-2.6/drivers/md/raid10.c
> @@ -1263,6 +1263,7 @@ static void raid10_write_one_disk(struct
> mbio->bi_iter.bi_sector = (r10_bio->devs[n_copy].addr +
> choose_data_offset(r10_bio, rdev));
> mbio->bi_end_io = raid10_end_write_request;
> + mbio->bi_opf &= ~REQ_RAHEAD;
> if (!replacement && test_bit(FailFast,
> &conf->mirrors[devnum].rdev->flags)
> && enough(conf, devnum))
>
>
> .
>
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 11:19 ` Yu Kuai
@ 2025-05-19 11:39 ` Yu Kuai
2025-05-19 12:05 ` Mikulas Patocka
2025-05-19 12:15 ` Mikulas Patocka
0 siblings, 2 replies; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 11:39 UTC (permalink / raw)
To: Yu Kuai, Mikulas Patocka
Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 19:19, Yu Kuai 写道:
>> The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks
>> the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and
>> raid10 to pass down all the flags from the incoming bio. The problem is
>> when we pass down the REQ_RAHEAD flag - bios with this flag may fail
>> anytime and md-raid is not prepared to handle this failure.
>
> Can dm-raid handle this falg? At least from md-raid array, for read
> ahead IO, it doesn't make sense to kill that flag.
>
> If we want to fall back to old behavior, can we kill that flag from
> dm-raid?
Please ignore the last reply, I misunderstand your commit message, I
thought you said dm-raid, actually you said mdraid, and it's correct,
if read_bio faild raid1/10 will set badblocks which is not expected.
Then for reada head IO, I still think don't kill REQ_RAHEAD for
underlying disks is better, what do you think about skip handling IO
error for ead ahead IO?
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 657d481525be..b8b4fead31f3 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -380,7 +380,10 @@ static void raid1_end_read_request(struct bio *bio)
/* This was a fail-fast read so we definitely
* want to retry */
;
- else {
+ else if (bio->bi_opf & REQ_RAHEAD) {
+ /* don't handle readahead error, which can fail at
anytime. */
+ uptodate = 1;
+ } else {
/* If all other devices have failed, we want to return
* the error upwards rather than fail the last device.
* Here we redefine "uptodate" to mean "Don't want to
retry"
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index dce06bf65016..4d51aaf3b39b 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -399,6 +399,9 @@ static void raid10_end_read_request(struct bio *bio)
* wait for the 'master' bio.
*/
set_bit(R10BIO_Uptodate, &r10_bio->state);
+ } else if (bio->bi_opf & REQ_RAHEAD) {
+ /* don't handle readahead error, which can fail at
anytime. */
+ uptodate = 1;
} else {
/* If all other devices that store this block have
* failed, we want to return the error upwards rather
Thanks,
Kuai
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 11:39 ` Yu Kuai
@ 2025-05-19 12:05 ` Mikulas Patocka
2025-05-19 12:34 ` Yu Kuai
2025-05-19 12:15 ` Mikulas Patocka
1 sibling, 1 reply; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-19 12:05 UTC (permalink / raw)
To: Yu Kuai; +Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
[-- Attachment #1: Type: text/plain, Size: 1234 bytes --]
On Mon, 19 May 2025, Yu Kuai wrote:
> Hi,
>
> 在 2025/05/19 19:19, Yu Kuai 写道:
> > > The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks
> > > the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and
> > > raid10 to pass down all the flags from the incoming bio. The problem is
> > > when we pass down the REQ_RAHEAD flag - bios with this flag may fail
> > > anytime and md-raid is not prepared to handle this failure.
> >
> > Can dm-raid handle this falg? At least from md-raid array, for read
> > ahead IO, it doesn't make sense to kill that flag.
> >
> > If we want to fall back to old behavior, can we kill that flag from
> > dm-raid?
>
> Please ignore the last reply, I misunderstand your commit message, I
> thought you said dm-raid, actually you said mdraid, and it's correct,
> if read_bio faild raid1/10 will set badblocks which is not expected.
>
> Then for reada head IO, I still think don't kill REQ_RAHEAD for
> underlying disks is better, what do you think about skip handling IO
> error for ead ahead IO?
I presume that md-raid will report an error and kick the disk out of the
array if a bio with REQ_RAHEAD fails - could this be the explanation of
this bug?
Mikulas
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 11:39 ` Yu Kuai
2025-05-19 12:05 ` Mikulas Patocka
@ 2025-05-19 12:15 ` Mikulas Patocka
1 sibling, 0 replies; 18+ messages in thread
From: Mikulas Patocka @ 2025-05-19 12:15 UTC (permalink / raw)
To: Yu Kuai; +Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
On Mon, 19 May 2025, Yu Kuai wrote:
> Hi,
>
> Please ignore the last reply, I misunderstand your commit message, I
> thought you said dm-raid, actually you said mdraid, and it's correct,
> if read_bio faild raid1/10 will set badblocks which is not expected.
>
> Then for reada head IO, I still think don't kill REQ_RAHEAD for
> underlying disks is better, what do you think about skip handling IO
> error for ead ahead IO?
>
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 657d481525be..b8b4fead31f3 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -380,7 +380,10 @@ static void raid1_end_read_request(struct bio *bio)
> /* This was a fail-fast read so we definitely
> * want to retry */
> ;
> - else {
> + else if (bio->bi_opf & REQ_RAHEAD) {
> + /* don't handle readahead error, which can fail at anytime. */
> + uptodate = 1;
> + } else {
> /* If all other devices have failed, we want to return
> * the error upwards rather than fail the last device.
> * Here we redefine "uptodate" to mean "Don't want to retry"
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index dce06bf65016..4d51aaf3b39b 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -399,6 +399,9 @@ static void raid10_end_read_request(struct bio *bio)
> * wait for the 'master' bio.
> */
> set_bit(R10BIO_Uptodate, &r10_bio->state);
> + } else if (bio->bi_opf & REQ_RAHEAD) {
> + /* don't handle readahead error, which can fail at anytime. */
> + uptodate = 1;
> } else {
> /* If all other devices that store this block have
> * failed, we want to return the error upwards rather
>
> Thanks,
> Kuai
I confirm that this patch fixes the test.
Tested-by: Mikulas Patocka <mpatocka@redhat.com>
Mikulas
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 12:05 ` Mikulas Patocka
@ 2025-05-19 12:34 ` Yu Kuai
2025-05-20 6:28 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-19 12:34 UTC (permalink / raw)
To: Mikulas Patocka, Yu Kuai
Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 20:05, Mikulas Patocka 写道:
>
>
> On Mon, 19 May 2025, Yu Kuai wrote:
>
>> Hi,
>>
>> 在 2025/05/19 19:19, Yu Kuai 写道:
>>>> The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks
>>>> the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and
>>>> raid10 to pass down all the flags from the incoming bio. The problem is
>>>> when we pass down the REQ_RAHEAD flag - bios with this flag may fail
>>>> anytime and md-raid is not prepared to handle this failure.
>>>
>>> Can dm-raid handle this falg? At least from md-raid array, for read
>>> ahead IO, it doesn't make sense to kill that flag.
>>>
>>> If we want to fall back to old behavior, can we kill that flag from
>>> dm-raid?
>>
>> Please ignore the last reply, I misunderstand your commit message, I
>> thought you said dm-raid, actually you said mdraid, and it's correct,
>> if read_bio faild raid1/10 will set badblocks which is not expected.
>>
>> Then for reada head IO, I still think don't kill REQ_RAHEAD for
>> underlying disks is better, what do you think about skip handling IO
>> error for ead ahead IO?
>
> I presume that md-raid will report an error and kick the disk out of the
> array if a bio with REQ_RAHEAD fails - could this be the explanation of
> this bug?
This is right if the rdev is set FailFast. However, by default if bio
failed, raid1/raid10 will record badblocks first, and retry the read
untill all underlying disks faild, then read_balance() will finally
found there is no avaliable disk to read and return error.
BTW, I still need to figure out how to run this test to see what really
happened.
Thanks,
Kuai
>
> Mikulas
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-19 11:07 ` Yu Kuai
@ 2025-05-19 13:55 ` Zdenek Kabelac
2025-05-20 1:45 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Zdenek Kabelac @ 2025-05-19 13:55 UTC (permalink / raw)
To: Yu Kuai, Mikulas Patocka; +Cc: Song Liu, linux-raid, dm-devel, yukuai (C)
Dne 19. 05. 25 v 13:07 Yu Kuai napsal(a):
> Hi,
>
> 在 2025/05/19 18:45, Zdenek Kabelac 写道:
>> Dne 19. 05. 25 v 12:10 Mikulas Patocka napsal(a):
>>> On Mon, 19 May 2025, Yu Kuai wrote:
>>>
>>>> Hi,
>>>>
>>>> 在 2025/05/19 9:11, Yu Kuai 写道:
>>>>> Hi,
>>>>>
>>>>> 在 2025/05/17 0:00, Mikulas Patocka 写道:
>>>>>> Hi
>>>>>>
>>>>>> The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
>>>>>> shell/lvcreate-large-raid.sh in the lvm2 testsuite.
>>>>>>
>>>>>> The breakage is caused by removing the line "read_bio->bi_opf = op |
>>>>>> do_sync;"
>>>>>>
>>>> Do I need some special setup to run this test? I got following
>>>> result in my VM, and I don't understand why it failed.
>>>>
>>>> Ask Zdenek Kabelac - he is expert in the testsuite.
>>>>
>>>> Mikulas
>>
>>
>> Hi
>>
>>
>> Lvm2 test suite is creating 'virtual' disk setup - it usually tries first
>> build something with 'brd' - if this device is 'in-use' it fallback to
>> create some files in LVM_TEST_DIR.
>>
>> This dir however must allow creation of device - by default nowdays /dev/shm
>> & /tmp are mounted with 'nodev' mount option.
>>
>> So a dir which does allow dev creation must be passed to the test - so
>> either remount dir without 'nodev' or set LVM_TEST_DIR to the filesystem
>> which allows creation of devices.
>
> Yes, I know that, and I set LVM_TEST_DIR to a new mounted nvme, as use
> can see in the attached log:
>
> [ 0:02.335] ## DF_H: /dev/nvme0n1 98G 64K 93G 1% /mnt/test
Hi
Please check the output of 'mount' command whether your mount point /mnt/test
allows creation of devices (i.e. does not use 'nodev' as setting for this
mountpoint)
>
>>
>> In 'lvm2/test' run 'make help' to see all possible settings - useful one
>> could be LVM_TEST_AUX_TRACE to expose shell traces from test internals -
>> helps with debugging...
> The log do have shell trace, I think, it stoped here, I just don't know
> why :(
>
> [ 0:01.709] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:31
> [ 0:01.710] ## 1 STACKTRACE() called from /root/lvm2/test/shell/lvcreate-
> large-raid.sh:31
>
Run:
'make check_local T=lvcreate-large-raid LVM_TEST_AUX_TRACE=1 VERBOSE=1'
for more closer look why it is failing when preparing devices.
My best guess is the use of 'nodev' flag (thus mount with '-o dev')
Regards
Zdenek
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-19 13:55 ` Zdenek Kabelac
@ 2025-05-20 1:45 ` Yu Kuai
2025-05-20 1:53 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-20 1:45 UTC (permalink / raw)
To: Zdenek Kabelac, Yu Kuai, Mikulas Patocka
Cc: Song Liu, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 21:55, Zdenek Kabelac 写道:
> Dne 19. 05. 25 v 13:07 Yu Kuai napsal(a):
>> Hi,
>>
>> 在 2025/05/19 18:45, Zdenek Kabelac 写道:
>>> Dne 19. 05. 25 v 12:10 Mikulas Patocka napsal(a):
>>>> On Mon, 19 May 2025, Yu Kuai wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> 在 2025/05/19 9:11, Yu Kuai 写道:
>>>>>> Hi,
>>>>>>
>>>>>> 在 2025/05/17 0:00, Mikulas Patocka 写道:
>>>>>>> Hi
>>>>>>>
>>>>>>> The commit e879a0d9cb086c8e52ce6c04e5bfa63825a6213c breaks the test
>>>>>>> shell/lvcreate-large-raid.sh in the lvm2 testsuite.
>>>>>>>
>>>>>>> The breakage is caused by removing the line "read_bio->bi_opf = op |
>>>>>>> do_sync;"
>>>>>>>
>>>>> Do I need some special setup to run this test? I got following
>>>>> result in my VM, and I don't understand why it failed.
>>>>>
>>>>> Ask Zdenek Kabelac - he is expert in the testsuite.
>>>>>
>>>>> Mikulas
>>>
>>>
>>> Hi
>>>
>>>
>>> Lvm2 test suite is creating 'virtual' disk setup - it usually tries
>>> first build something with 'brd' - if this device is 'in-use' it
>>> fallback to create some files in LVM_TEST_DIR.
>>>
>>> This dir however must allow creation of device - by default nowdays
>>> /dev/shm & /tmp are mounted with 'nodev' mount option.
>>>
>>> So a dir which does allow dev creation must be passed to the test -
>>> so either remount dir without 'nodev' or set LVM_TEST_DIR to the
>>> filesystem which allows creation of devices.
>>
>> Yes, I know that, and I set LVM_TEST_DIR to a new mounted nvme, as use
>> can see in the attached log:
>>
>> [ 0:02.335] ## DF_H: /dev/nvme0n1 98G 64K 93G 1% /mnt/test
>
> Hi
>
> Please check the output of 'mount' command whether your mount point
> /mnt/test
> allows creation of devices (i.e. does not use 'nodev' as setting for
> this mountpoint)
>
>
>>
>>>
>>> In 'lvm2/test' run 'make help' to see all possible settings -
>>> useful one could be LVM_TEST_AUX_TRACE to expose shell traces from
>>> test internals - helps with debugging...
>> The log do have shell trace, I think, it stoped here, I just don't know
>> why :(
>>
>> [ 0:01.709] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:31
>> [ 0:01.710] ## 1 STACKTRACE() called from
>> /root/lvm2/test/shell/lvcreate- large-raid.sh:31
>>
>
>
> Run:
>
> 'make check_local T=lvcreate-large-raid LVM_TEST_AUX_TRACE=1 VERBOSE=1'
>
> for more closer look why it is failing when preparing devices.
> My best guess is the use of 'nodev' flag (thus mount with '-o dev')
nodev is not the cause here, and other tests like lvcreate-large-raid10
can pass. Following is the results after adding LVM_TEST_AUX_TRACE=1
VERBOSE=1:
[ 0:04.201] + local slash
[ 0:04.201] + test -f LOOP
[ 0:04.201] + echo -n '## preparing loop device...'
[ 0:04.201] ## preparing loop device...+ test -f SCSI_DEBUG_DEV
[ 0:04.201] + test '!' -e LOOP
[ 0:04.206] + test -n /mnt/test/LVMTEST4022.LI2unegZz8/dev
[ 0:04.206] + for i in 0 1 2 3 4 5 6 7
[ 0:04.206] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop0
[ 0:04.206] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop0 b 7 0
[ 0:04.206] + for i in 0 1 2 3 4 5 6 7
[ 0:04.266] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop1
[ 0:04.267] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop1 b 7 1
[ 0:04.267] + for i in 0 1 2 3 4 5 6 7
[ 0:04.300] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop2
[ 0:04.300] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop2 b 7 2
[ 0:04.301] + for i in 0 1 2 3 4 5 6 7
[ 0:04.351] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop3
[ 0:04.351] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop3 b 7 3
[ 0:04.351] + for i in 0 1 2 3 4 5 6 7
[ 0:04.405] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop4
[ 0:04.405] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop4 b 7 4
[ 0:04.407] + for i in 0 1 2 3 4 5 6 7
[ 0:04.452] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop5
[ 0:04.453] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop5 b 7 5
[ 0:04.453] + for i in 0 1 2 3 4 5 6 7
[ 0:04.503] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop6
[ 0:04.503] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop6 b 7 6
[ 0:04.505] + for i in 0 1 2 3 4 5 6 7
[ 0:04.555] + test -e /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop7
[ 0:04.555] + mknod /mnt/test/LVMTEST4022.LI2unegZz8/dev/loop7 b 7 7
[ 0:04.558] + echo -n .
[ 0:04.607] .+ local LOOPFILE=/mnt/test/LVMTEST4022.LI2unegZz8/test.img
[ 0:04.607] + rm -f /mnt/test/LVMTEST4022.LI2unegZz8/test.img
[
0:04.608] + dd if=/dev/zero of=/mnt/test/LVMTEST4022.LI2unegZz8/test.img
bs=1048576 count=0 seek=5000000003
[ 0:04.650] set +vx; STACKTRACE; set -vx
[ 0:04.702] ##lvcreate-large-raid.sh:31+ set +vx
[ 0:04.703] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:31
[ 0:04.705] ## 1 STACKTRACE() called from
/root/lvm2/test/shell/lvcreate-large-raid.sh:31
Then I tried the dd cmd myself:
dd if=/dev/zero of=/mnt/test/test.img bs=1048576 count=0 seek=5000000003
dd: failed to truncate to 5242880003145728 bytes in output file
'/mnt/test/test.img': File too large
And this is because ext4 has hard limit of file size, 2^48:
fs/ext4/super.c: sb->s_maxbytes =
ext4_max_size(sb->s_blocksize_bits, has_huge_files);
So, I can't use ext4 for this testcase. :(
Thanks,
Kuai
>
> Regards
>
> Zdenek
>
> .
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-20 1:45 ` Yu Kuai
@ 2025-05-20 1:53 ` Yu Kuai
2025-05-20 3:47 ` Su Yue
0 siblings, 1 reply; 18+ messages in thread
From: Yu Kuai @ 2025-05-20 1:53 UTC (permalink / raw)
To: Yu Kuai, Zdenek Kabelac, Mikulas Patocka
Cc: Song Liu, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/20 9:45, Yu Kuai 写道:
> dd if=/dev/zero of=/mnt/test/test.img bs=1048576 count=0 seek=5000000003
> dd: failed to truncate to 5242880003145728 bytes in output file
> '/mnt/test/test.img': File too large
>
> And this is because ext4 has hard limit of file size, 2^48:
>
> fs/ext4/super.c: sb->s_maxbytes =
> ext4_max_size(sb->s_blocksize_bits, has_huge_files);
>
> So, I can't use ext4 for this testcase. :(
Sadly, after switching to xfs, with 2^64 file size limit, I got a new
error:
[ 0:10.980] # 200 TiB raid1
[ 0:10.980] lvcreate --type raid1 -m 1 -L 200T -n $lv1 $vg1 --nosync
[ 0:10.980] #lvcreate-large-raid.sh:51+ lvcreate --type raid1 -m 1 -L
200T -n LV1 LVMTEST1868vg1 --nosync
[ 0:10.980] File descriptor 6 (/dev/pts/0) leaked on lvm invocation.
Parent PID 1868: bash
[ 0:11.226] WARNING: New raid1 won't be synchronized. Don't read what
you didn't write!
[ 0:11.397] Failed to deactivate LVMTEST1868vg1/LV1_rmeta_0.
[ 0:11.776] Internal error: Removing still active LV
LVMTEST1868vg1/LV1_rmeta_0.
[ 0:11.966] /root/lvm2/test/shell/lvcreate-large-raid.sh: line 51: 2071
Aborted (core dumped) lvcreate --type raid1 -m 1 -L 200T
-n $lv1 $vg1 --nosync
[ 0:14.059] set +vx; STACKTRACE; set -vx
[ 0:14.061] ##lvcreate-large-raid.sh:51+ set +vx
[ 0:14.061] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:51
[ 0:14.065] ## 1 STACKTRACE() called from
/root/lvm2/test/shell/lvcreate-large-raid.sh:51
Looks like lvcreate crashed.
Thanks,
Kuai
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-20 1:53 ` Yu Kuai
@ 2025-05-20 3:47 ` Su Yue
2025-05-20 6:12 ` Yu Kuai
0 siblings, 1 reply; 18+ messages in thread
From: Su Yue @ 2025-05-20 3:47 UTC (permalink / raw)
To: Yu Kuai
Cc: Zdenek Kabelac, Mikulas Patocka, Song Liu, linux-raid, dm-devel,
yukuai (C)
On Tue 20 May 2025 at 09:53, Yu Kuai <yukuai1@huaweicloud.com>
wrote:
> Hi,
>
> 在 2025/05/20 9:45, Yu Kuai 写道:
>> dd if=/dev/zero of=/mnt/test/test.img bs=1048576 count=0
>> seek=5000000003
>> dd: failed to truncate to 5242880003145728 bytes in output file
>> '/mnt/test/test.img': File too large
>> And this is because ext4 has hard limit of file size, 2^48:
>> fs/ext4/super.c: sb->s_maxbytes =
>> ext4_max_size(sb->s_blocksize_bits,
>> has_huge_files);
>> So, I can't use ext4 for this testcase. :(
>
> Sadly, after switching to xfs, with 2^64 file size limit, I got
> a new
> error:
>
> [ 0:10.980] # 200 TiB raid1
> [ 0:10.980] lvcreate --type raid1 -m 1 -L 200T -n $lv1 $vg1
> --nosync
> [ 0:10.980] #lvcreate-large-raid.sh:51+ lvcreate --type raid1 -m
> 1 -L 200T -n
> LV1 LVMTEST1868vg1 --nosync
> [ 0:10.980] File descriptor 6 (/dev/pts/0) leaked on lvm
> invocation. Parent PID
> 1868: bash
> [ 0:11.226] WARNING: New raid1 won't be synchronized. Don't
> read what you
> didn't write!
> [ 0:11.397] Failed to deactivate LVMTEST1868vg1/LV1_rmeta_0.
> [ 0:11.776] Internal error: Removing still active LV
> LVMTEST1868vg1/LV1_rmeta_0.
> [ 0:11.966] /root/lvm2/test/shell/lvcreate-large-raid.sh: line
> 51: 2071 Aborted
> (core dumped) lvcreate --type raid1 -m 1 -L 200T -n $lv1 $vg1
> --nosync
> [ 0:14.059] set +vx; STACKTRACE; set -vx
> [ 0:14.061] ##lvcreate-large-raid.sh:51+ set +vx
> [ 0:14.061] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:51
> [ 0:14.065] ## 1 STACKTRACE() called from
> /root/lvm2/test/shell/lvcreate-large-raid.sh:51
>
> Looks like lvcreate crashed.
>
Can't reproduce it on v6.15-rc7 and lvm2 HEAD
37b28216fd029ffe2fac815b16645aeb9d352235:
/dev/vdc on /mnt type xfs
(rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
make check_local T=shell/lvcreate-large-raid.sh
LVM_TEST_AUX_TRACE=1 VERBOSE=1 LVM_TEST_DIR=/mnt
What's your kernel and lvm versions?
--
Su
> Thanks,
> Kuai
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: LVM2 test breakage
2025-05-20 3:47 ` Su Yue
@ 2025-05-20 6:12 ` Yu Kuai
0 siblings, 0 replies; 18+ messages in thread
From: Yu Kuai @ 2025-05-20 6:12 UTC (permalink / raw)
To: Su Yue, Yu Kuai
Cc: Zdenek Kabelac, Mikulas Patocka, Song Liu, linux-raid, dm-devel,
yukuai (C)
Hi,
在 2025/05/20 11:47, Su Yue 写道:
> On Tue 20 May 2025 at 09:53, Yu Kuai <yukuai1@huaweicloud.com> wrote:
>
>> Hi,
>>
>> 在 2025/05/20 9:45, Yu Kuai 写道:
>>> dd if=/dev/zero of=/mnt/test/test.img bs=1048576 count=0 seek=5000000003
>>> dd: failed to truncate to 5242880003145728 bytes in output file
>>> '/mnt/test/test.img': File too large
>>> And this is because ext4 has hard limit of file size, 2^48:
>>> fs/ext4/super.c: sb->s_maxbytes =
>>> ext4_max_size(sb->s_blocksize_bits,
>>> has_huge_files);
>>> So, I can't use ext4 for this testcase. :(
>>
>> Sadly, after switching to xfs, with 2^64 file size limit, I got a new
>> error:
>>
>> [ 0:10.980] # 200 TiB raid1
>> [ 0:10.980] lvcreate --type raid1 -m 1 -L 200T -n $lv1 $vg1 --nosync
>> [ 0:10.980] #lvcreate-large-raid.sh:51+ lvcreate --type raid1 -m 1 -L
>> 200T -n
>> LV1 LVMTEST1868vg1 --nosync
>> [ 0:10.980] File descriptor 6 (/dev/pts/0) leaked on lvm invocation.
>> Parent PID
>> 1868: bash
>> [ 0:11.226] WARNING: New raid1 won't be synchronized. Don't read
>> what you
>> didn't write!
>> [ 0:11.397] Failed to deactivate LVMTEST1868vg1/LV1_rmeta_0.
>> [ 0:11.776] Internal error: Removing still active LV
>> LVMTEST1868vg1/LV1_rmeta_0.
>> [ 0:11.966] /root/lvm2/test/shell/lvcreate-large-raid.sh: line 51:
>> 2071 Aborted
>> (core dumped) lvcreate --type raid1 -m 1 -L 200T -n $lv1 $vg1 --nosync
>> [ 0:14.059] set +vx; STACKTRACE; set -vx
>> [ 0:14.061] ##lvcreate-large-raid.sh:51+ set +vx
>> [ 0:14.061] ## - /root/lvm2/test/shell/lvcreate-large-raid.sh:51
>> [ 0:14.065] ## 1 STACKTRACE() called from
>> /root/lvm2/test/shell/lvcreate-large-raid.sh:51
>>
>> Looks like lvcreate crashed.
>>
> Can't reproduce it on v6.15-rc7 and lvm2 HEAD
> 37b28216fd029ffe2fac815b16645aeb9d352235:
>
> /dev/vdc on /mnt type xfs
> (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
> make check_local T=shell/lvcreate-large-raid.sh LVM_TEST_AUX_TRACE=1
> VERBOSE=1 LVM_TEST_DIR=/mnt
>
> What's your kernel and lvm versions?
Thanks for the notice, I just switched lvm to this commit, make
distclean, and them everything looks fine now. :)
Thanks,
Kuai
>
> --
> Su
>> Thanks,
>> Kuai
> .
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag
2025-05-19 12:34 ` Yu Kuai
@ 2025-05-20 6:28 ` Yu Kuai
0 siblings, 0 replies; 18+ messages in thread
From: Yu Kuai @ 2025-05-20 6:28 UTC (permalink / raw)
To: Yu Kuai, Mikulas Patocka
Cc: Song Liu, zkabelac, linux-raid, dm-devel, yukuai (C)
Hi,
在 2025/05/19 20:34, Yu Kuai 写道:
> Hi,
>
> 在 2025/05/19 20:05, Mikulas Patocka 写道:
>>
>>
>> On Mon, 19 May 2025, Yu Kuai wrote:
>>
>>> Hi,
>>>
>>> 在 2025/05/19 19:19, Yu Kuai 写道:
>>>>> The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags")
>>>>> breaks
>>>>> the lvm2 test shell/lvcreate-large-raid.sh. The commit changes
>>>>> raid1 and
>>>>> raid10 to pass down all the flags from the incoming bio. The
>>>>> problem is
>>>>> when we pass down the REQ_RAHEAD flag - bios with this flag may fail
>>>>> anytime and md-raid is not prepared to handle this failure.
>>>>
>>>> Can dm-raid handle this falg? At least from md-raid array, for read
>>>> ahead IO, it doesn't make sense to kill that flag.
>>>>
>>>> If we want to fall back to old behavior, can we kill that flag from
>>>> dm-raid?
>>>
>>> Please ignore the last reply, I misunderstand your commit message, I
>>> thought you said dm-raid, actually you said mdraid, and it's correct,
>>> if read_bio faild raid1/10 will set badblocks which is not expected.
>>>
>>> Then for reada head IO, I still think don't kill REQ_RAHEAD for
>>> underlying disks is better, what do you think about skip handling IO
>>> error for ead ahead IO?
>>
>> I presume that md-raid will report an error and kick the disk out of the
>> array if a bio with REQ_RAHEAD fails - could this be the explanation of
>> this bug?
>
> This is right if the rdev is set FailFast. However, by default if bio
> failed, raid1/raid10 will record badblocks first, and retry the read
> untill all underlying disks faild, then read_balance() will finally
> found there is no avaliable disk to read and return error.
>
> BTW, I still need to figure out how to run this test to see what really
> happened.
I can run the test now, and I confirmed that the dm-raid is build on the
top of dm-zero, and for dm-zero, all read ahead bio will return -EIO.
And failfast is set, causing test to fail:
[ 0:54.960] [135.521104] <2> 2025-05-20 06:20:23 md/raid1:mdX: Disk
failure on dm-6, disabling device.\x0amd/raid1:mdX: Operation continuing
on 1 devices.
[ 0:54.960] #lvcreate-large-raid.sh:77+ check lv_field
LVMTEST1119vg1/LV1 size 400.00t
[ 0:55.012] File descriptor 6 (/dev/pts/0) leaked on lvm invocation.
Parent PID 1670: bash
[ 0:55.278] WARNING: RaidLV LVMTEST1119vg1/LV1 needs to be refreshed!
See character 'r' at position 9 in the RaidLV's attributes and also its
SubLV(s) with option '-a'.
[ 0:55.307] check raid_leg_status $vg1 $lv1 "AA"
[ 0:55.474] #lvcreate-large-raid.sh:78+ check raid_leg_status
LVMTEST1119vg1 LV1 AA
[ 0:55.474] LVMTEST1119vg1-LV1 status DA != AA (0 858993459200 raid
raid1 2 DA 429496729600/429496729600 idle 0 0 -)
[ 0:55.534] set +vx; STACKTRACE; set -vx
Thanks,
Kuai
>
> Thanks,
> Kuai
>
>>
>> Mikulas
>>
>
> .
>
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-05-20 6:28 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-16 16:00 LVM2 test breakage Mikulas Patocka
2025-05-19 1:11 ` Yu Kuai
2025-05-19 6:41 ` Yu Kuai
2025-05-19 10:10 ` Mikulas Patocka
[not found] ` <81c5847a-cfd8-4f9f-892c-62cca3d17e63@redhat.com>
2025-05-19 11:07 ` Yu Kuai
2025-05-19 13:55 ` Zdenek Kabelac
2025-05-20 1:45 ` Yu Kuai
2025-05-20 1:53 ` Yu Kuai
2025-05-20 3:47 ` Su Yue
2025-05-20 6:12 ` Yu Kuai
2025-05-19 10:08 ` Mikulas Patocka
2025-05-19 10:09 ` [PATCH] md/raid1,raid10: don't pass down the REQ_RAHEAD flag Mikulas Patocka
2025-05-19 11:19 ` Yu Kuai
2025-05-19 11:39 ` Yu Kuai
2025-05-19 12:05 ` Mikulas Patocka
2025-05-19 12:34 ` Yu Kuai
2025-05-20 6:28 ` Yu Kuai
2025-05-19 12:15 ` Mikulas Patocka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).