diff mbox series

block/001: wait until device is added

Message ID 20210824031753.1397579-1-ming.lei@redhat.com
State New
Headers show
Series block/001: wait until device is added | expand

Commit Message

Ming Lei Aug. 24, 2021, 3:17 a.m. UTC
Writing to the scan attribute of scsi host is usually one sync scan, but
devices in this sync scan may be delay added if there is concurrent
asnyc scan.

So wait until the device is added in block/001 for avoiding to fail
the test.

Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 tests/block/001 | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Omar Sandoval Aug. 25, 2021, 12:56 a.m. UTC | #1
On Tue, Aug 24, 2021 at 11:17:53AM +0800, Ming Lei wrote:
> Writing to the scan attribute of scsi host is usually one sync scan, but

> devices in this sync scan may be delay added if there is concurrent

> asnyc scan.

> 

> So wait until the device is added in block/001 for avoiding to fail

> the test.

> 

> Cc: "Martin K. Petersen" <martin.petersen@oracle.com>

> Cc: linux-scsi@vger.kernel.org

> Signed-off-by: Ming Lei <ming.lei@redhat.com>

> ---

>  tests/block/001 | 9 +++++++--

>  1 file changed, 7 insertions(+), 2 deletions(-)

> 

> diff --git a/tests/block/001 b/tests/block/001

> index 51ec9d8..01356d0 100755

> --- a/tests/block/001

> +++ b/tests/block/001

> @@ -21,15 +21,20 @@ stress_scsi_debug() {

>  		return

>  	fi

>  

> -	local host target

> +	local host target target_path

>  	for target in "${SCSI_DEBUG_TARGETS[@]}"; do

>  		(

>  		host="${target%%:*}"

>  		scan="${target#*:}"

>  		scan="${scan//:/ }"

> +		target_path="/sys/class/scsi_device/${target}"

>  		while [[ ! -e "$TMPDIR/stop" ]]; do

>  			echo "${scan}" > "/sys/class/scsi_host/host${host}/scan"

> -			echo 1 > "/sys/class/scsi_device/${target}/device/delete"

> +			while [ ! -d ${target_path} ]; do

> +				sleep 0.01;

> +				[[ -e "$TMPDIR/stop" ]] && break

> +			done

> +			[ -d ${target_path} ] && echo 1 > ${target_path}/device/delete


Applied, with the shellcheck errors fixed and simplified logic. Thanks.
diff mbox series

Patch

diff --git a/tests/block/001 b/tests/block/001
index 51ec9d8..01356d0 100755
--- a/tests/block/001
+++ b/tests/block/001
@@ -21,15 +21,20 @@  stress_scsi_debug() {
 		return
 	fi
 
-	local host target
+	local host target target_path
 	for target in "${SCSI_DEBUG_TARGETS[@]}"; do
 		(
 		host="${target%%:*}"
 		scan="${target#*:}"
 		scan="${scan//:/ }"
+		target_path="/sys/class/scsi_device/${target}"
 		while [[ ! -e "$TMPDIR/stop" ]]; do
 			echo "${scan}" > "/sys/class/scsi_host/host${host}/scan"
-			echo 1 > "/sys/class/scsi_device/${target}/device/delete"
+			while [ ! -d ${target_path} ]; do
+				sleep 0.01;
+				[[ -e "$TMPDIR/stop" ]] && break
+			done
+			[ -d ${target_path} ] && echo 1 > ${target_path}/device/delete
 		done
 		) &
 	done