Received: by 2002:ac8:156:0:b0:3e0:cd10:60c8 with SMTP id f22csp2499974qtg; Thu, 23 Mar 2023 04:59:23 -0700 (PDT) X-Google-Smtp-Source: AK7set/U2nQ7wXzK+qOcgYX8pFzbyuBkAE485OiL9KsY5rg5XvwSl3UmRsSbkmGVMMa2HZu+3pTy X-Received: by 2002:a17:906:2c07:b0:84d:4e4f:1f85 with SMTP id e7-20020a1709062c0700b0084d4e4f1f85mr10263206ejh.59.1679572763259; Thu, 23 Mar 2023 04:59:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679572763; cv=none; d=google.com; s=arc-20160816; b=yjYYTnBIzaCh6NoVsj49IX5Zlb+JIC+oppiU+1Z2+l6v+rjTmtpQfqzJUvo+0xEL10 DABuX6UlYzpeLodpDWVjZziqRUTXTyR7615zBgVZdtqRfYtQfXlVBqcYXsLliLuMGW2n eXligqC515LGc8gtfBzrmEIS3A0pWBB+XKHYYSzpj7/FXoo8Y6JA8vJ64W8/PyjPs3oj 7k/XlVZT5offTjdf0fE8FbkUxNn0bL/tc+todPVOViLvq45b5P42f4EudprO0S/IVZz8 geXiTPMromqByh/gOT/EtaknaWzthK/WOkq55+7YhLnHbTlGcjHNabXkaKx4D32d6U5a GvcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=gwemiNwAD4COOxjsRkaSrU73jqcRNGDikhXz6Y5+VWE=; b=UYDq6PJBBTJ+q3dXagQUub2AFF3hn0P7IeEBPrdbPNvOyD1P7sCHJDbft2Hcttdm8G 50TwpF86E8LQ1k3MpGrfp8+frWWeXYiqHNVJFA7DqWeV9F7lNFUNqlabUr1ST//yqeCJ VSy/tMXR+qQrMaDNart+YyGjyjBmqm6u/dojuZFlFR8ynmtTvE+KWthfJDTbhVEC334Y +22i9QwaF08fIp3zdMBzlmLTwbZR+cp+IkUpjiVlP1J+CTKBXWFfpvKWFzOzuGorTRey 9mnUH+KrYdvtk9k7mwew3qWpIDrzsgV/MzhACxXZrOc/f1SPnWdP+m5YEQVOxutqzLSq Pgtg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t6-20020aa7d706000000b00501d531e632si8469441edq.449.2023.03.23.04.58.58; Thu, 23 Mar 2023 04:59:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231569AbjCWL56 (ORCPT + 99 others); Thu, 23 Mar 2023 07:57:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230025AbjCWL5W (ORCPT ); Thu, 23 Mar 2023 07:57:22 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 547AF35263; Thu, 23 Mar 2023 04:56:58 -0700 (PDT) Received: from kwepemm600012.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Pj3dl5M4XzbcQc; Thu, 23 Mar 2023 19:53:47 +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.21; Thu, 23 Mar 2023 19:56:55 +0800 From: Wenchao Hao To: "James E . J . Bottomley" , "Martin K . Petersen" , Douglas Gilbert , , CC: , , Subject: [PATCH 4/5] scsi:scsi_debug: Return failed value if the error is injected Date: Thu, 23 Mar 2023 19:56:00 +0800 Message-ID: <20230323115601.178494-5-haowenchao2@huawei.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20230323115601.178494-1-haowenchao2@huawei.com> References: <20230323115601.178494-1-haowenchao2@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.101.6] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600012.china.huawei.com (7.193.23.74) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If a fail queuecommand error is injected, return the failed value defined in the rule from queuecommand. We can make any scsi command's queuecommand return the value we desired, for example make it return SCSI_MLQUEUE_HOST_BUSY. error=/sys/class/scsi_device/0:0:0:1/device/error_inject/error echo "1 1 0x12 0x1055" > $error would make all inquiry(0x12) command's queuecommand return 0x1055: Signed-off-by: Wenchao Hao --- 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 06a830eb2ca1..1deccf8dfc90 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -7764,6 +7764,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) { @@ -7783,6 +7807,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) { @@ -7828,6 +7853,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