Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp4509822rwb; Tue, 8 Nov 2022 18:51:16 -0800 (PST) X-Google-Smtp-Source: AMsMyM4put8zkBy+Q0oXaG3XtFyAAkX77pp5Y2frPMblvLkGjA3JuQ7XKbbPRzMA6oRGjKkEnnld X-Received: by 2002:a63:c04f:0:b0:46f:9f4a:593 with SMTP id z15-20020a63c04f000000b0046f9f4a0593mr44931209pgi.482.1667962276109; Tue, 08 Nov 2022 18:51:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1667962276; cv=none; d=google.com; s=arc-20160816; b=ZGaY+fhpV3PEoblUwkBCWa5t9R8CwismcAUnu1WVEZAtLojtPHz0kKjtXXq5J45HK2 MztEig4tkTOjmM8BqeisJLaNGowuNezKpR8/GEfmeS/9mlUboU1mH25yzvLBtKkOadQQ YJdp9PHp3MnA3GCM6elL2w6rFgfB7mkE1HLPaPLB/msnaWklAzhx0SCG4Dm+4hxpwRJ4 onUCOSqfi4Kxfxh/gIHYoDrVCSvJKzzSrhvwHbCmIbVSC70ODDkDphiBXAXwwXOmkEp0 E6oSCYLPtwxJqZVzWvJI4U99HvsxYAcj2GwBAZd1MIBeTgw7+4xRaweoV/Hsx+bYtw9F xC6g== 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=NWHBcXX8ztmFz6JSUdW4Q+r3ZnU+G+MNylLr1fMeRtU=; b=npRTqniL4M/OIQxL1CDKXIaOe+nuCXouPfvJIFhK/R/tkUjfGnxOeIplFuGWok7BFS piDWrs4h5gh0CziQCaLbUxbkAbfIEG3/JbQ9z8RgBryaBIS+gnvgYgc4irtuZxckqYpi N2W9EnlCv9msRe/ZoEKsjlkvpl8cwkGsCQk3R6fZ0GHfyfXqSC2RR0c0pvqZrU5/44B7 jXGGfXBnor+pij2RVcEbpeaisUvYMshT08jqJFEP8ZUGn2F8JLYm/xgP6GWC4nQrbl/a MqOvdSNqAwG67rRiB6j2gUOQjbpDN+GSXOoI2ABduVLnBMbtHmUp5ZhoNsewb+uJ+DPY ybOg== 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 f2-20020a056a00228200b00563960fdb21si16549209pfe.260.2022.11.08.18.51.04; Tue, 08 Nov 2022 18:51:16 -0800 (PST) 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 S230007AbiKICoE (ORCPT + 94 others); Tue, 8 Nov 2022 21:44:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229924AbiKICnw (ORCPT ); Tue, 8 Nov 2022 21:43:52 -0500 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC670FD14; Tue, 8 Nov 2022 18:43:50 -0800 (PST) Received: from dggpemm500023.china.huawei.com (unknown [172.30.72.53]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4N6Tmn2ypkz15MTp; Wed, 9 Nov 2022 10:43:37 +0800 (CST) Received: from dggpemm500017.china.huawei.com (7.185.36.178) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 9 Nov 2022 10:43:49 +0800 Received: from build.huawei.com (10.175.101.6) by dggpemm500017.china.huawei.com (7.185.36.178) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 9 Nov 2022 10:43:48 +0800 From: Wenchao Hao To: "James E . J . Bottomley" , "Martin K . Petersen" , Doug Gilbert CC: , , Wenchao Hao 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 Message-ID: <20221109155950.3536976-5-haowenchao@huawei.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20221109155950.3536976-1-haowenchao@huawei.com> References: <20221109155950.3536976-1-haowenchao@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: dggems703-chm.china.huawei.com (10.3.19.180) To dggpemm500017.china.huawei.com (7.185.36.178) 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 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 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 --- 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