xref: /linux/tools/testing/selftests/ublk/test_generic_17.sh (revision f3e3dbcea15e20f7413afd8c791a496f0b80e80b)
1320f9b1cSUday Shankar#!/bin/bash
2320f9b1cSUday Shankar# SPDX-License-Identifier: GPL-2.0
3320f9b1cSUday Shankar
4320f9b1cSUday Shankar. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
5320f9b1cSUday Shankar
6320f9b1cSUday ShankarERR_CODE=0
7320f9b1cSUday Shankar
8320f9b1cSUday Shankar_prep_test "fault_inject" "teardown after incomplete recovery"
9320f9b1cSUday Shankar
10320f9b1cSUday Shankar# First start and stop a ublk server with device configured for recovery
11320f9b1cSUday Shankardev_id=$(_add_ublk_dev -t fault_inject -r 1)
12320f9b1cSUday Shankar_check_add_dev $TID $?
13320f9b1cSUday Shankarstate=$(__ublk_kill_daemon "${dev_id}" "QUIESCED")
14320f9b1cSUday Shankarif [ "$state" != "QUIESCED" ]; then
15320f9b1cSUday Shankar        echo "device isn't quiesced($state) after $action"
16320f9b1cSUday Shankar        ERR_CODE=255
17320f9b1cSUday Shankarfi
18320f9b1cSUday Shankar
19320f9b1cSUday Shankar# Then recover the device, but use --die_during_fetch to have the ublk
20320f9b1cSUday Shankar# server die while a queue has some (but not all) I/Os fetched
21320f9b1cSUday Shankar${UBLK_PROG} recover -n "${dev_id}" --foreground -t fault_inject --die_during_fetch 1
22320f9b1cSUday ShankarRECOVER_RES=$?
23320f9b1cSUday Shankar# 137 is the result when dying of SIGKILL
24320f9b1cSUday Shankarif (( RECOVER_RES != 137 )); then
25320f9b1cSUday Shankar        echo "recover command exited with unexpected code ${RECOVER_RES}!"
26320f9b1cSUday Shankar        ERR_CODE=255
27320f9b1cSUday Shankarfi
28320f9b1cSUday Shankar
29320f9b1cSUday Shankar# Clean up the device. This can only succeed once teardown of the above
30320f9b1cSUday Shankar# exited ublk server completes. So if teardown never completes, we will
31320f9b1cSUday Shankar# time out here
32320f9b1cSUday Shankar_ublk_del_dev "${dev_id}"
33320f9b1cSUday Shankar
34*eac857a1SCaleb Sander Mateos_cleanup_test
35320f9b1cSUday Shankar_show_result $TID $ERR_CODE
36