From patchwork Mon Oct 15 15:51:39 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: 10642079 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 70D983B73 for ; Mon, 15 Oct 2018 15:52:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 60F4229A4C for ; Mon, 15 Oct 2018 15:52:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5560D29D92; Mon, 15 Oct 2018 15:52:12 +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=-6.5 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,URIBL_ABUSE_SURBL 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 77F4329CA6 for ; Mon, 15 Oct 2018 15:52:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726545AbeJOXh7 (ORCPT ); Mon, 15 Oct 2018 19:37:59 -0400 Received: from out002.mailprotect.be ([83.217.72.86]:48693 "EHLO out002.mailprotect.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726515AbeJOXh7 (ORCPT ); Mon, 15 Oct 2018 19:37:59 -0400 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=VmhE8a1Ub9+jmf57qPAvBzT51QApbEbY8COOL3fvbYU=; b=kR1fcAE2Kq5g 2apXvvuXtGFpyLvI829k8xxZHzq2WxdpBXz2kLeeTwbXxe6cL7Ri9fiWeCVoSIqrsfX60FyUbG0nI BtvC89npJFRY0pAqU4EMxk8bG7Ir9GyQG3YgKqpX6JdFzd9jUr2GIKyu28dB3tICimxccEVPA3ODj 4c1uOJUye/ubajUnR21qAB9+EOrvnAomJcsabZzse1xyGLlJALqFHiu7b4mT13rZryTTP0piENecS tS784ffVKieg0E7wDErpq17RfUmXBKk0FxnK+gCVRhIdr/RGj+JnxEMVhlD1YetrOOdPc6tFQPgeE IZdz6lI3cL5+wgG67/9Npw==; Received: from smtp-auth.mailprotect.be ([178.208.39.155]) by com-mpt-out002.mailprotect.be with esmtp (Exim 4.89) (envelope-from ) id 1gC5A2-0009b2-CH; Mon, 15 Oct 2018 17:52:03 +0200 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 1129CC07A1; Mon, 15 Oct 2018 17:51:58 +0200 (CEST) From: Bart Van Assche To: "Martin K . Petersen" Cc: Christoph Hellwig , target-devel@vger.kernel.org, Bart Van Assche , Mike Christie , Hannes Reinecke Subject: [PATCH 6/6] target/core: Always call transport_complete_callback() upon failure Date: Mon, 15 Oct 2018 08:51:39 -0700 Message-Id: <20181015155139.143446-7-bvanassche@acm.org> X-Mailer: git-send-email 2.19.0.605.g01d371f741-goog In-Reply-To: <20181015155139.143446-1-bvanassche@acm.org> References: <20181015155139.143446-1-bvanassche@acm.org> MIME-Version: 1.0 X-Originating-IP: 178.208.39.155 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.05) X-Recommended-Action: accept X-Filter-ID: EX5BVjFpneJeBchSMxfU5kboLPPZTEWeJPUWZ6AtwUZ602E9L7XzfQH6nu9C/Fh9KJzpNe6xgvOx q3u0UDjvO1tLifGj39bI0bcPyaJsYTZxu3Byt9q6TVKuEvuKfBQ+aWdYlCowlUnTo3UbachR40Zf fE0usZyS6PgIMmbCO3gkbdGM+jggbhZjfwa/Ogn5Zys6RYhY2imAj2+fF1Ma8Omxdr9OC1XUrlfa OmQB6e65e8jXa/Ea2gAgBrec9tAizcnIJmV/EOrG3jtoSDbBLR5e973vehgRRMJdd1x498Q6aSop 1VmFdzKki3Lf0Py0Ucju/Fd8gZoUQm8ysuFdGDBATaXJi7Z4ZhS731MYRsQSQWn9OYmU74xfbcEY ge/fQ5V1w/lQDKmwNbTAZ3E5Dpk5mH/X3pSH/ENJb2CQDcu/XzAMt/0PABq6TVaYjnpbxmD/2Y9v Q6c+CWRhbvYX853D5caUhbVtvqItBqoizkEQpFMpOnK2cKmSUffE8iapT1zD59o8cPYKs494BBiY WZpnLXKSPjmKiZZGO+roBKKdSCGABwb9D8aK2Qif5uut31/E3ahF5MMcDI7KdpjQKRG0HOT5ecYO CZkoygoA2+QvP92yJqFDUMWgYkYfhC80REDgvLPPYwYvrULndIB5QrNud3PgzKGZ88iododq/YfV WMlHoWh7YJ70YBk8N5yx6J1fhOzjF0b4LXcjJZ5louxf6ne4pHVivVmY0wtE7rIy3/265IZaBaHy RxFyhirgEkb9AHldeYfDeuTlPTdQ+5LPfRlCCIyI0Yv3ypBAHZjiWAj99Mzwr0GLDMEFW1nETrlU kMKWpoTN4DsyS5wnPuol7Ms2nAH/0jNlDiiCinvKATDDBZ7fFc0FDw0l2bg+jkeExOUtS7k2YYS4 3XpVG7T16L20XLidvZ59Qh6JHQkATIzNr/1fYV+w9TGWHEuebwN0BCkzBb1FgeZJe7aTin5mKiWY 4qyAovTKsLgKiJpsYzB6zs3Ie5gF1CN3Vi14kybNYmBNw2nvSnaifocwwtEyvDkN3AfUBddcu9g0 UhyhLJoDVPNCkw0HFsHtEuJgAFHDO1LA3rllvVAfaoz9P82wWVbjHO/cpJpsYlvFhM9OFv+pmyo5 sRDJ3Ba4degLD9XCJ1j3Qs4VUPN7CTHyu+z6MAWK52wAXqk3taVJ+IE= 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 COMPARE AND WRITE command execution starts with a call of sbc_compare_and_write(). That function locks the caw_sem member in the backend device data structure and submits a read request to the backend driver. Upon successful completion of the read compare_and_write_callback() gets called. That last function compares the data that has been read. If it matches transport_complete_callback is set to compare_and_write_post and a write request is submitted. compare_and_write_post() submits a write request to the backend driver. XDWRITEREAD command execution starts with sbc_execute_rw() submitting a read to the backend device. Upon successful completion of the read the xdreadwrite_callback() gets called. That function xors the data that has been read with the data in the data-out buffer and stores the result in the data-in buffer. Call transport_complete_callback() not only if COMPARE AND WRITE fails but also if XDWRITEREAD fails. This makes the code more systematic. Make sure that the callback functions handle (cmd, false, NULL) argument triples fine. Reviewed-by: Christoph Hellwig Reviewed-by: Nicholas Bellinger Cc: Mike Christie Cc: Hannes Reinecke Signed-off-by: Bart Van Assche --- drivers/target/target_core_sbc.c | 6 +++++- drivers/target/target_core_transport.c | 11 +++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c index 3d3568a037b1..1ac1f7d2e6c9 100644 --- a/drivers/target/target_core_sbc.c +++ b/drivers/target/target_core_sbc.c @@ -360,6 +360,10 @@ static sense_reason_t xdreadwrite_callback(struct se_cmd *cmd, bool success, unsigned int offset; sense_reason_t ret = TCM_NO_SENSE; int i, count; + + if (!success) + return 0; + /* * From sbc3r22.pdf section 5.48 XDWRITEREAD (10) command * @@ -426,7 +430,7 @@ static sense_reason_t compare_and_write_post(struct se_cmd *cmd, bool success, sense_reason_t ret = TCM_NO_SENSE; spin_lock_irq(&cmd->t_state_lock); - if (cmd->transport_state & CMD_T_SENT) { + if (success) { *post_ret = 1; if (cmd->scsi_status == SAM_STAT_CHECK_CONDITION) diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 468e1ca8a833..f66d7a03c651 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1778,7 +1778,7 @@ EXPORT_SYMBOL(target_submit_tmr); void transport_generic_request_failure(struct se_cmd *cmd, sense_reason_t sense_reason) { - int ret = 0, post_ret = 0; + int ret = 0; pr_debug("-----[ Storage Engine Exception; sense_reason %d\n", sense_reason); @@ -1789,13 +1789,8 @@ void transport_generic_request_failure(struct se_cmd *cmd, */ transport_complete_task_attr(cmd); - /* - * Handle special case for COMPARE_AND_WRITE failure, where the - * callback is expected to drop the per device ->caw_sem. - */ - if ((cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) && - cmd->transport_complete_callback) - cmd->transport_complete_callback(cmd, false, &post_ret); + if (cmd->transport_complete_callback) + cmd->transport_complete_callback(cmd, false, NULL); if (transport_check_aborted_status(cmd, 1)) return;