From nobody Thu Feb 12 06:13:49 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 025E7C7EE23 for ; Thu, 27 Apr 2023 12:13:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243919AbjD0MNC (ORCPT ); Thu, 27 Apr 2023 08:13:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243806AbjD0MMp (ORCPT ); Thu, 27 Apr 2023 08:12:45 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 48FD1559A; Thu, 27 Apr 2023 05:12:18 -0700 (PDT) Received: from kwepemm600012.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Q6ZLp6VY6zsR61; Thu, 27 Apr 2023 20:10:26 +0800 (CST) Received: from build.huawei.com (10.175.101.6) by kwepemm600012.china.huawei.com (7.193.23.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 27 Apr 2023 20:12:05 +0800 From: Wenchao Hao To: "James E . J . Bottomley" , "Martin K . Petersen" , Douglas Gilbert , , CC: , , Wenchao Hao Subject: [PATCH v2 4/6] scsi:scsi_debug: timeout command if the error is injected Date: Fri, 28 Apr 2023 09:33:18 +0800 Message-ID: <20230428013320.347050-5-haowenchao2@huawei.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20230428013320.347050-1-haowenchao2@huawei.com> References: <20230428013320.347050-1-haowenchao2@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.175.101.6] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemm600012.china.huawei.com (7.193.23.74) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If a timeout error is injected, return 0 from scsi_debug_queuecommand to make the command timeout. For example, the following command would inject timeout error for inquiry(0x12) command for 10 times: error=3D/sys/kernel/debug/scsi_debug/0:0:0:1/error echo "0 -10 0x12" > $error Signed-off-by: Wenchao Hao --- drivers/scsi/scsi_debug.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 2c380cddcb84..2d31ae15bd97 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -7714,6 +7714,30 @@ static int sdebug_blk_mq_poll(struct Scsi_Host *shos= t, unsigned int queue_num) return num_entries; } =20 +static int sdebug_timeout_cmd(struct scsi_cmnd *cmnd) +{ + struct scsi_device *sdp =3D cmnd->device; + struct sdebug_dev_info *devip =3D (struct sdebug_dev_info *)sdp->hostdata; + struct sdebug_err_inject *err; + unsigned char *cmd =3D cmnd->cmnd; + int ret =3D 0; + + if (devip =3D=3D NULL) + return 0; + + list_for_each_entry(err, &devip->inject_err_list, list) { + if (err->type =3D=3D ERR_TMOUT_CMD && + (err->cmd =3D=3D cmd[0] || err->cmd =3D=3D 0xff)) { + ret =3D !!err->cnt; + if (err->cnt < 0) + err->cnt++; + return ret; + } + } + + return 0; +} + static int scsi_debug_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scp) { @@ -7772,6 +7796,12 @@ static int scsi_debug_queuecommand(struct Scsi_Host = *shost, if (NULL =3D=3D devip) goto err_out; } + + if (sdebug_timeout_cmd(scp)) { + scmd_printk(KERN_INFO, scp, "timeout command 0x%x\n", opcode); + return 0; + } + if (unlikely(inject_now && !atomic_read(&sdeb_inject_pending))) atomic_set(&sdeb_inject_pending, 1); =20 --=20 2.32.0