From patchwork Tue Nov 6 17:17:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 10670873 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B8D1915E9 for ; Tue, 6 Nov 2018 17:18:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F2092AA2B for ; Tue, 6 Nov 2018 17:18:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9316A2AA2E; Tue, 6 Nov 2018 17:18:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1BF942AA20 for ; Tue, 6 Nov 2018 17:18:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389303AbeKGCpE (ORCPT ); Tue, 6 Nov 2018 21:45:04 -0500 Received: from com-out001.mailprotect.be ([83.217.72.83]:42819 "EHLO com-out001.mailprotect.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389281AbeKGCpE (ORCPT ); Tue, 6 Nov 2018 21:45:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mailprotect.be; s=mail; h=Content-Transfer-Encoding:MIME-Version:References :In-Reply-To:Message-Id:Date:Subject:Cc:To:From:reply-to:sender:bcc: content-type; bh=D/hbiJfMzigm+V9lBjIbqr0uRPeE5Z64IWYkVFE2OtI=; b=Dr/R0w1EejOG v+15h9E1KBRlduAp6Gt+myeiIQVgrfO4WURXth2bmng2djmPav/yBAZPxwjNnZXfBA444om9mwsnG 8F9VSegDGsXJALEscGMGAyJm9/KvxjBm4Ggfonu6C+0PVEORI3KgEmrNOP5y2lGtDltFtMEexsqfr mYRILVG70gmYOD4U/61p6GlXrvqM83nK3qZyJzaMHUV/tQoYcLOWLTMUV4AC4IPKP3vbxSuSpTp8g wqK28kkstItYTqSiOzqnMmhTyIhodH39rwHIcihQxHSjy1K3SGtiw4q5u42jhplJi2WEQJC5kZt4s 2ojjy8GisUhsPhT7ffxLpA==; Received: from smtp-auth.mailprotect.be ([178.208.39.159]) by com-mpt-out001.mailprotect.be with esmtp (Exim 4.89) (envelope-from ) id 1gK4zx-000CLa-TW; Tue, 06 Nov 2018 18:18:42 +0100 Received: from desktop-bart.svl.corp.google.com (unknown [104.133.8.89]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-auth.mailprotect.be (Postfix) with ESMTPSA id 2F3D7C030B; Tue, 6 Nov 2018 18:18:38 +0100 (CET) From: Bart Van Assche To: "Martin K . Petersen" Cc: Christoph Hellwig , target-devel@vger.kernel.org, Bart Van Assche , Nicholas Bellinger , Mike Christie , David Disseldorp , Hannes Reinecke Subject: [PATCH 07/10] target/core: Simplify the code for aborting SCSI commands Date: Tue, 6 Nov 2018 09:17:15 -0800 Message-Id: <20181106171718.89594-8-bvanassche@acm.org> X-Mailer: git-send-email 2.19.1.930.g4563a0d9d0-goog In-Reply-To: <20181106171718.89594-1-bvanassche@acm.org> References: <20181106171718.89594-1-bvanassche@acm.org> MIME-Version: 1.0 X-Originating-IP: 178.208.39.159 X-SpamExperts-Domain: mailprotect.be X-SpamExperts-Username: 178.208.39.128/27 Authentication-Results: mailprotect.be; auth=pass smtp.auth=178.208.39.128/27@mailprotect.be X-SpamExperts-Outgoing-Class: ham X-SpamExperts-Outgoing-Evidence: Combined (0.04) X-Recommended-Action: accept X-Filter-ID: EX5BVjFpneJeBchSMxfU5oVSXQ0s+/7WZoUPSz3EBHl602E9L7XzfQH6nu9C/Fh9KJzpNe6xgvOx q3u0UDjvO1tLifGj39bI0bcPyaJsYTagCTS5H5Pie2sCQ3gGSzr06cM7U7xDGmYwNG93LVnxwxjk yGQYCd08t3lHobjxX/OigDGQOIiVUN5rGO3B5zfVpnsdsF0/474T9aStD4uEKVG9P9yTThxC66Ku Xb0HO3W8nbMwgkUuW83PKbk25YSnvgtxKKcMIJ7ptgUxRg53TuCt4QJNIvyoxb4710Nl6KAZZ+9r UkyLOOkgJ9eTXvOC4trOptRiSOXsXUvIrRE5Gi64E/luATX2C15uIo03jxlI2C8QBYsWIMCVBHpa 7Qj+JYN6Crh9DXUDEtWWsjsNUWDlGPaDR+Aes7asAZpVFyfMODodi5MLJiAvrVIiQFNhc8S+HKYI 1vbaqYoREZsvVKq8YZ9/SG1CqFB/T9oOuGliwtRkR+GX5UQPXdpKZF7ITlSXoP8r3OOc9CaULF46 7VT2rSAdw3oKkBNp3q2CTUjaBEkZvVwfNyBf8N9Cj3+++mTSKn34bbFRlO1kXUycpLT8XjuR2au2 vXjeilQq2Qb31qklcVekvgO5ge3Iu/DWvQSnovmZV/iKI4Qq8lKVZU757KiUYziXyuXG4Z+FT7fy UhTxDKdOQwQquEi4jLe86t14bfTnkAn7W6VlJXtsnkdl1her2dsH1gtu4R2VkYfnELRpqCZGYewS zF6qDSUBpQp9p69drFuEpAhhs7hKCCLwHYF1mz4X0cGLGMLXeUelyYvxOs9QGp7DuNSpjNB+2bRk WbJQMsEazexAznFikUFGnvKVJnFQQaAnDicXOB0lxU/TKjOssk5IMwdmSU/MN6mG9OgEfwYjdW8p pBMOL6KehsbCb0/0wF8xekzsVEvRMrw5DdwH1AXXXLvYNFIciWrFfcvTzpdI3AEG059XQUt63dWQ TTh3AT6Ut54lNDJ3OnKG9eRDP2/Ogb+c8D2oYTsY8dUpTw48b2MGkvEkgszLgRqa1sRnErSRPh8z fPP2CFl7xGIrJ5fPg33HFhWuygEwwwWe3xXNBQ8NJdm4Pscvb9y1CBweR1aEOEmF+7+XwJhp74Ne BZS/7a9ATcUMpAEntM8yKElR+Y84QVlpY/2Olap60rnP5huMjJeWSwzfzlDTegaelgiu9QvTToG3 X/ekOoQKVaL7/+VCcmuF/Q== X-Report-Abuse-To: spam@com-mpt-mgt001.mailprotect.be Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Instead of allowing the code that aborts a SCSI command to finish before all iSCSI data frames have been received, make that code wait until all iSCSI data frames have been received. Introduce a new member variable in the target driver template to communicate that information from the iSCSI target driver to the target core. This change allows to leave out the check whether or not it is already safe to send the TASK_ABORTED reply from transport_send_task_abort(). Cc: Nicholas Bellinger Cc: Mike Christie Cc: Christoph Hellwig Cc: David Disseldorp Cc: Hannes Reinecke Signed-off-by: Bart Van Assche --- drivers/target/iscsi/iscsi_target_configfs.c | 2 ++ drivers/target/target_core_transport.c | 22 ++------------------ include/target/target_core_fabric.h | 7 +++++++ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index 95d0a22b2ad6..1a81386dd7f7 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c @@ -1596,4 +1596,6 @@ const struct target_core_fabric_ops iscsi_ops = { .tfc_tpg_nacl_attrib_attrs = lio_target_nacl_attrib_attrs, .tfc_tpg_nacl_auth_attrs = lio_target_nacl_auth_attrs, .tfc_tpg_nacl_param_attrs = lio_target_nacl_param_attrs, + + .write_pending_must_be_called = true, }; diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 7b77520a2b35..34cfd6a83505 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -2583,7 +2583,8 @@ transport_generic_new_cmd(struct se_cmd *cmd) * Determine if frontend context caller is requesting the stopping of * this command for frontend exceptions. */ - if (cmd->transport_state & CMD_T_STOP) { + if (cmd->transport_state & CMD_T_STOP && + !cmd->se_tfo->write_pending_must_be_called) { pr_debug("%s:%d CMD_T_STOP for ITT: 0x%08llx\n", __func__, __LINE__, cmd->tag); @@ -3296,25 +3297,6 @@ void transport_send_task_abort(struct se_cmd *cmd) } spin_unlock_irqrestore(&cmd->t_state_lock, flags); - /* - * If there are still expected incoming fabric WRITEs, we wait - * until until they have completed before sending a TASK_ABORTED - * response. This response with TASK_ABORTED status will be - * queued back to fabric module by transport_check_aborted_status(). - */ - if (cmd->data_direction == DMA_TO_DEVICE) { - if (cmd->se_tfo->write_pending_status(cmd) != 0) { - spin_lock_irqsave(&cmd->t_state_lock, flags); - if (cmd->se_cmd_flags & SCF_SEND_DELAYED_TAS) { - spin_unlock_irqrestore(&cmd->t_state_lock, flags); - goto send_abort; - } - cmd->se_cmd_flags |= SCF_SEND_DELAYED_TAS; - spin_unlock_irqrestore(&cmd->t_state_lock, flags); - return; - } - } -send_abort: cmd->scsi_status = SAM_STAT_TASK_ABORTED; transport_lun_remove_cmd(cmd); diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index eb9d0923c55c..6859277fc409 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -101,6 +101,13 @@ struct target_core_fabric_ops { struct configfs_attribute **tfc_tpg_nacl_attrib_attrs; struct configfs_attribute **tfc_tpg_nacl_auth_attrs; struct configfs_attribute **tfc_tpg_nacl_param_attrs; + + /* + * Set this member variable to true if the SCSI transport protocol + * (e.g. iSCSI) requires that the Data-Out buffer is transferred in + * its entirety before a command is aborted. + */ + bool write_pending_must_be_called; }; int target_register_template(const struct target_core_fabric_ops *fo);