Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp562524rwr; Thu, 27 Apr 2023 05:27:51 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ62wUqpIZV4n1w7/+x99SEDihD9/2+FKabZodBFR9PItQz1DmdL3ZevK/fcC3pIj+99VRI+ X-Received: by 2002:a17:90a:c89:b0:249:78db:2635 with SMTP id v9-20020a17090a0c8900b0024978db2635mr1534886pja.0.1682598471516; Thu, 27 Apr 2023 05:27:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682598471; cv=none; d=google.com; s=arc-20160816; b=0aCmAUSHRvhXio4o6wCgeJPmljpVDgpBdAGUORvsN7rQy1paifFijRWVSHvfs5gRx7 RlHkhRCUIYeKhtKEixybLur4Aqma+iIF5IvgPvGs5xN2KXfl279af7uOeFvTgRL3sUih i0epk/i+IFy9MrXygLg8WCnf837SYD+MY0KjlAqwVaK0Ee5477bHeNvi35joEqibboV8 k29CValZWgg1mgDbJ4Bbv08EzV/3HWoOk3VA/lo/p3c0mNA7o7gqLD/zdubKL4WD/zad cPuQmt24z0pmY4H8lkxuGSc83aBCtHlg6bRWvKnsuKSbxlM7Uy7hvbbZGTwdCy5ada4j Ck5Q== 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=gIrevdan65OsewOloei6g2d3Rw+hr20E7n7gXg+Bf3k=; b=qnf0n9Lz4iiherMILYJWK8zCPjC80kXTKnKVYeJW7OGpwjIbzJgce5QxGTHoXk7K3q jtqByM5/pC5+zRmxqltfWeHBIyH0ptZq79PyWlhn0TZxV27NL194iicweqDUCH0SThEH gzFQ9pYbA9Vh7B/3b/eLgBFTdg2SdEM8R9Uxhwg7Q2OLxsb+RnAAb1F+VpsDZ0W8dbjL iBBFD4CXP5fNOMWtI2xIs2IrqwbuR8dx7nHpuBujQHDcHSEwI0LT75Dpg93jeznXynIw fIaDsgSykUXL4zq0gT3aK0FDIUU36FEefI27a29O7hwo7Awf1DP0s5vQlRsxLk6AYN1h BzRg== 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 x59-20020a17090a6c4100b00240d313b97dsi20984327pjj.90.2023.04.27.05.27.40; Thu, 27 Apr 2023 05:27:51 -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 S243884AbjD0MNJ (ORCPT + 99 others); Thu, 27 Apr 2023 08:13:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243789AbjD0MMp (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 8D30755A2; Thu, 27 Apr 2023 05:12:18 -0700 (PDT) Received: from kwepemm600012.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Q6ZJD0SRFzpTQt; Thu, 27 Apr 2023 20:08:12 +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 5/6] scsi:scsi_debug: Return failed value if the error is injected Date: Fri, 28 Apr 2023 09:33:19 +0800 Message-ID: <20230428013320.347050-6-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: 7BIT Content-Type: text/plain; charset=US-ASCII 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 X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DATE_IN_FUTURE_12_24, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no 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/kernel/debug/scsi_debug/0:0:0:1/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 2d31ae15bd97..340299e63069 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -7738,6 +7738,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) { @@ -7757,6 +7781,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) { @@ -7802,6 +7827,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.32.0