| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh |
| |
| ERR_CODE=0 |
| |
| _prep_test "fault_inject" "teardown after incomplete recovery" |
| |
| # First start and stop a ublk server with device configured for recovery |
| dev_id=$(_add_ublk_dev -t fault_inject -r 1) |
| _check_add_dev $TID $? |
| state=$(__ublk_kill_daemon "${dev_id}" "QUIESCED") |
| if [ "$state" != "QUIESCED" ]; then |
| echo "device isn't quiesced($state) after $action" |
| ERR_CODE=255 |
| fi |
| |
| # Then recover the device, but use --die_during_fetch to have the ublk |
| # server die while a queue has some (but not all) I/Os fetched |
| ${UBLK_PROG} recover -n "${dev_id}" --foreground -t fault_inject --die_during_fetch 1 |
| RECOVER_RES=$? |
| # 137 is the result when dying of SIGKILL |
| if (( RECOVER_RES != 137 )); then |
| echo "recover command exited with unexpected code ${RECOVER_RES}!" |
| ERR_CODE=255 |
| fi |
| |
| # Clean up the device. This can only succeed once teardown of the above |
| # exited ublk server completes. So if teardown never completes, we will |
| # time out here |
| _ublk_del_dev "${dev_id}" |
| |
| _cleanup_test |
| _show_result $TID $ERR_CODE |