1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 5 6ERR_CODE=0 7 8_prep_test "null" "stop --safe command" 9 10# Check if SAFE_STOP_DEV feature is supported 11if ! _have_feature "SAFE_STOP_DEV"; then 12 _cleanup_test "null" 13 exit "$UBLK_SKIP_CODE" 14fi 15 16# Test 1: stop --safe on idle device should succeed 17dev_id=$(_add_ublk_dev -t null -q 2 -d 32) 18_check_add_dev $TID $? 19 20# Device is idle (no openers), stop --safe should succeed 21if ! ${UBLK_PROG} stop -n "${dev_id}" --safe; then 22 echo "stop --safe on idle device failed unexpectedly!" 23 ERR_CODE=255 24fi 25 26# Clean up device 27_ublk_del_dev "${dev_id}" > /dev/null 2>&1 28udevadm settle 29 30# Test 2: stop --safe on device with active opener should fail 31dev_id=$(_add_ublk_dev -t null -q 2 -d 32) 32_check_add_dev $TID $? 33 34# Open device in background (dd reads indefinitely) 35dd if=/dev/ublkb${dev_id} of=/dev/null bs=4k iflag=direct > /dev/null 2>&1 & 36dd_pid=$! 37 38# Give dd time to start 39sleep 0.2 40 41# Device has active opener, stop --safe should fail with -EBUSY 42if ${UBLK_PROG} stop -n "${dev_id}" --safe 2>/dev/null; then 43 echo "stop --safe on busy device succeeded unexpectedly!" 44 ERR_CODE=255 45fi 46 47# Kill dd and clean up 48kill $dd_pid 2>/dev/null 49wait $dd_pid 2>/dev/null 50 51# Now device should be idle, regular delete should work 52_ublk_del_dev "${dev_id}" 53udevadm settle 54 55_cleanup_test "null" 56_show_result $TID $ERR_CODE 57