From: Wenchao Hao <haowenchao@huawei.com>
To: "James E . J . Bottomley" <jejb@linux.ibm.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Doug Gilbert <dgilbert@interlog.com>
Cc: <linux-scsi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Wenchao Hao <haowenchao@huawei.com>
Subject: [RFC PATCH 4/5] scsi:scsi_debug: Return failed value for specific command's queuecommand
Date: Wed, 9 Nov 2022 10:59:49 -0500 [thread overview]
Message-ID: <20221109155950.3536976-5-haowenchao@huawei.com> (raw)
In-Reply-To: <20221109155950.3536976-1-haowenchao@huawei.com>
If a fail queuecommand error is injected for specific scsi command, just
return the failed value rejected in queuecommand.
We can make any scsi command's queuecommand return the value we desired,
for example make it return SCSI_MLQUEUE_HOST_BUSY.
For example the following command would make all inquiry(0x12) command's
queuecommand return 0x1055:
echo "1 1 0x12 0x1055" >/sys/block/sdb/device/error_inject/error
Signed-off-by: Wenchao Hao <haowenchao@huawei.com>
---
drivers/scsi/scsi_debug.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 761e1e3bcb9a..217a9e892391 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -7808,6 +7808,30 @@ static int sdebug_timeout_cmd(struct scsi_cmnd *cmnd)
return 0;
}
+static int sdebug_fail_queue_cmd(struct scsi_cmnd *cmnd)
+{
+ struct scsi_device *sdp = cmnd->device;
+ struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
+ struct sdebug_err_inject *err;
+ unsigned char *cmd = cmnd->cmnd;
+ int ret = 0;
+
+ if (devip == NULL)
+ return 0;
+
+ list_for_each_entry(err, &devip->inject_err_list, list) {
+ if (err->type == ERR_FAIL_QUEUE_CMD &&
+ (err->cmd == cmd[0] || err->cmd == 0xff)) {
+ ret = err->cnt ? err->queuecmd_ret : 0;
+ if (err->cnt < 0)
+ err->cnt++;
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
static int scsi_debug_queuecommand(struct Scsi_Host *shost,
struct scsi_cmnd *scp)
{
@@ -7827,6 +7851,7 @@ static int scsi_debug_queuecommand(struct Scsi_Host *shost,
u8 opcode = cmd[0];
bool has_wlun_rl;
bool inject_now;
+ int ret = 0;
scsi_set_resid(scp, 0);
if (sdebug_statistics) {
@@ -7872,6 +7897,13 @@ static int scsi_debug_queuecommand(struct Scsi_Host *shost,
return 0;
}
+ ret = sdebug_fail_queue_cmd(scp);
+ if (ret) {
+ scmd_printk(KERN_INFO, scp, "fail queue command 0x%x with 0x%x\n",
+ opcode, ret);
+ return ret;
+ }
+
if (unlikely(inject_now && !atomic_read(&sdeb_inject_pending)))
atomic_set(&sdeb_inject_pending, 1);
--
2.35.3
next prev parent reply other threads:[~2022-11-09 2:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-09 15:59 [RFC PATCH 0/5] scsi:scsi_debug:Add error injection for single lun Wenchao Hao
2022-11-09 15:59 ` [RFC PATCH 1/5] scsi:scsi_debug: Add sysfs interface to manager single devices' error inject Wenchao Hao
2022-11-09 15:59 ` [RFC PATCH 2/5] scsi:scsi_debug: Add interface to remove injection which has been added Wenchao Hao
2022-11-09 15:59 ` [RFC PATCH 3/5] scsi:scsi_debug: make command timeout if timeout error is injected Wenchao Hao
2022-11-09 15:59 ` Wenchao Hao [this message]
2022-11-09 15:59 ` [RFC PATCH 5/5] scsi:scsi_debug: fail specific scsi command with result and sense data Wenchao Hao
2022-11-13 21:48 ` [RFC PATCH 0/5] scsi:scsi_debug:Add error injection for single lun Douglas Gilbert
2022-11-14 0:30 ` Damien Le Moal
2022-11-14 2:54 ` Douglas Gilbert
2022-11-14 2:55 ` Damien Le Moal
2022-11-21 14:26 ` Wenchao Hao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221109155950.3536976-5-haowenchao@huawei.com \
--to=haowenchao@huawei.com \
--cc=dgilbert@interlog.com \
--cc=jejb@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®