test_generic_16.sh 1.4 KB

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