mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-17 22:00:07 +01:00
On my test system `tests/unit-wipe-test` fails (as root) due to a race condition in add_device(): root@host:~# ./unit-wipe-test [1] Wipe full file [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [2] Wipe blocks in file [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [ 105.828258] scsi_debug:sdebug_driver_probe: scsi_debug: trim poll_queues to 0. poll_q/nr_hw = (0/1) [ 105.830450] scsi host2: scsi_debug: version 0191 [20210520] [ 105.830450] dev_size_mb=8, opts=0x0, submit_queues=1, statistics=0 [ 105.832924] scsi 2:0:0:0: Direct-Access Linux scsi_debug 0191 PQ: 0 ANSI: 7 [ 105.835417] scsi 2:0:0:0: Attached scsi generic sg1 type 0 FAIL Cannot find /dev/. FAILED backtrace: 48 ./unit-wipe-test 144 main ./unit-wipe-test [ 105.875131] sd 2:0:0:0: Power-on or device reset occurred [ 105.876069] sd 2:0:0:0: [sda] 16384 512-byte logical blocks: (8.39 MB/8.00 MiB) [ 105.877190] sd 2:0:0:0: [sda] Write Protect is off [ 105.878002] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA [ 105.879619] sd 2:0:0:0: [sda] Optimal transfer size 524288 bytes [ 105.914222] sd 2:0:0:0: [sda] Attached SCSI disk [ 106.866296] sd 2:0:0:0: [sda] Synchronizing SCSI cache Observe how the “Power-on or device reset occurred” event occurs only after add_device() has returned. Interestingly, for subsequent runs the delay appears to be much shorter and doesn't trigger the race condition: root@host:~# ./unit-wipe-test [1] Wipe full file [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [2] Wipe blocks in file [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [ 130.639855] scsi_debug:sdebug_driver_probe: scsi_debug: trim poll_queues to 0. poll_q/nr_hw = (0/1) [ 130.641463] scsi host2: scsi_debug: version 0191 [20210520] [ 130.641463] dev_size_mb=8, opts=0x0, submit_queues=1, statistics=0 [ 130.643809] scsi 2:0:0:0: Direct-Access Linux scsi_debug 0191 PQ: 0 ANSI: 7 [ 130.645342] sd 2:0:0:0: Power-on or device reset occurred [ 130.646364] sd 2:0:0:0: [sda] 16384 512-byte logical blocks: (8.39 MB/8.00 MiB) [ 130.647585] sd 2:0:0:0: [sda] Write Protect is off [ 130.648428] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 130.649339] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA [ 130.650763] sd 2:0:0:0: [sda] Optimal transfer size 524288 bytes [ 130.682223] sd 2:0:0:0: [sda] Attached SCSI disk [3] Wipe full block device [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [4] Wipe blocks in block device [0/DIO][0][1048576/DIO][1048576][4194304/DIO][4194304][OK] [ 137.858283] sd 2:0:0:0: [sda] Synchronizing SCSI cache This commit adds an optional 2s delay if scsi_debug hasn't shown up in sysfs after the modprobe call.