From patchwork Wed Nov 9 15:59:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wenchao Hao X-Patchwork-Id: 17315 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp100721wru; Tue, 8 Nov 2022 18:45:37 -0800 (PST) X-Google-Smtp-Source: AMsMyM75GZCZRySxnLtCEREEENvkra3FTVk+Q4e77mTPCOahCJ+YCUWDoUxMsSULIo1Ira4IHF82 X-Received: by 2002:a17:906:d142:b0:7ad:eb7f:bc9a with SMTP id br2-20020a170906d14200b007adeb7fbc9amr40654349ejb.337.1667961937591; Tue, 08 Nov 2022 18:45:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1667961937; cv=none; d=google.com; s=arc-20160816; b=BG7gSraZVjsQCKG9jT1ONWwd71vP75sX3sIlsHMDkR0qyaiWJji/sbHOtEVCV7zear JUw6et445Q+SWdYKmj0dz+w3V+9BsFi6nIKrKxhk2dD4VA3sTQeXBcuR4udIkiKNwTe6 nR97V58jQdmIKBvVXMwPFDpIKPKWe9Ly5UTg927XMezpTvD769/cTvfpa75hZr44eGay vNvR3UxBiKqQJinlvWDgu6L1F74/3G/AmSqpMVs3UAhM+q6az8cmyJWCaZ7Jh3TY/7OD AlFzDzeyRmW2hLG8i9WqQX+w9JBV4TGmmzF9gpgUSF7yKJyg8vDEA+vnkaOKqhNyTRSF iRTw== 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 Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ga38-20020a1709070c2600b0078cc4a8a956si15459283ejc.881.2022.11.08.18.45.13; Tue, 08 Nov 2022 18:45:37 -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 + 99 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 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748984856643770743?= X-GMAIL-MSGID: =?utf-8?q?1748984856643770743?= 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);