linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).