From patchwork Mon Mar 30 03:28:14 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nicholas A. Bellinger" X-Patchwork-Id: 6118291 Return-Path: X-Original-To: patchwork-linux-scsi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 7406A9F1BE for ; Mon, 30 Mar 2015 03:29:35 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7719620357 for ; Mon, 30 Mar 2015 03:29:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 65CC92037D for ; Mon, 30 Mar 2015 03:29:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752838AbbC3D3c (ORCPT ); Sun, 29 Mar 2015 23:29:32 -0400 Received: from mail-oi0-f53.google.com ([209.85.218.53]:34859 "EHLO mail-oi0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752734AbbC3D32 (ORCPT ); Sun, 29 Mar 2015 23:29:28 -0400 Received: by oiag65 with SMTP id g65so116969502oia.2 for ; Sun, 29 Mar 2015 20:29:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Htu29g7OHcW/DGASrsJhYrSW2ifiQ0G82hRYBkcmxaM=; b=YSePe2AAWmNuBYPW4i3mFaBODiUO0B0bpNcB6fA2Vh5wUfvlHaPhiVB4RzLWqkdFur dss+V8wTHmZYYj0+CGN2k3kpjS4jHZ9uWGFiw2CJGsvLTIC6QMAVUp4TkGS3cTy+JPSi xLzhTpSbfhVWuMWGHc/nHwOvhfIZ1QaaiyYNnCDHH42Z8oFnOL5o+KWMchD8nIB4OX9p erkgP3QQRqbFslWsZP3QsrAH9PcT9SK/6zt9SoTgpLGaf9+e24YRWh+plIVuueqJvn/W iI6Sm0VyVpobZqGmsezzD9gyZ+3HAi928cTk+GFW3DUkCjiEKoL0qSy+WtMtXOUXSWZV e3qg== X-Gm-Message-State: ALoCoQnxqq/Bbq9z8HPb5CtGkCbgu5Pir6Z0rE8OKt4btMA9iRiTZcVH1nQP5TKmK+oCJXVCcD/S X-Received: by 10.60.61.40 with SMTP id m8mr25106964oer.20.1427686167900; Sun, 29 Mar 2015 20:29:27 -0700 (PDT) Received: from localhost.localdomain (mail.linux-iscsi.org. [67.23.28.174]) by mx.google.com with ESMTPSA id wc6sm5439898obc.8.2015.03.29.20.29.27 (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 29 Mar 2015 20:29:27 -0700 (PDT) From: "Nicholas A. Bellinger" To: target-devel Cc: linux-scsi , "Martin K. Petersen" , Sagi Grimberg , Quinn Tran , Nicholas Bellinger , Christoph Hellwig Subject: [PATCH-v2 05/15] target: Add internal WRITE_STRIP support Date: Mon, 30 Mar 2015 03:28:14 +0000 Message-Id: <1427686104-14231-6-git-send-email-nab@daterainc.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1427686104-14231-1-git-send-email-nab@daterainc.com> References: <1427686104-14231-1-git-send-email-nab@daterainc.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Nicholas Bellinger This patch adds WRITE_STRIP support in target_check_write_prot() that invokes sbc_dif_verify_write() for checking T10-PI metadata before submitting the I/O to a backend driver. Upon verify failure, the specific sense code is propigated up the failure path up to transport_generic_request_failure(). Also, update sbc_dif_verify_write() to only perform the subsequent protection metadata copy when a valid *sg is passed. Cc: Martin Petersen Cc: Sagi Grimberg Cc: Christoph Hellwig Signed-off-by: Nicholas Bellinger Reviewed-by: Martin K. Petersen --- drivers/target/target_core_sbc.c | 3 +++ drivers/target/target_core_transport.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c index 68373c9..ea23b9c 100644 --- a/drivers/target/target_core_sbc.c +++ b/drivers/target/target_core_sbc.c @@ -1342,6 +1342,9 @@ sbc_dif_verify_write(struct se_cmd *cmd, sector_t start, unsigned int sectors, kunmap_atomic(paddr); kunmap_atomic(daddr); } + if (!sg) + return 0; + sbc_dif_copy_prot(cmd, sectors, false, sg, sg_off); return 0; diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 6a24151..51b62bd 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1740,6 +1740,7 @@ void __target_execute_cmd(struct se_cmd *cmd) static int target_check_write_prot(struct se_cmd *cmd) { + u32 sectors; /* * Perform WRITE_INSERT of PI using software emulation when backend * device has PI enabled, if the transport has not already generated @@ -1750,6 +1751,21 @@ static int target_check_write_prot(struct se_cmd *cmd) if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_INSERT)) sbc_dif_generate(cmd); break; + case TARGET_PROT_DOUT_STRIP: + if (cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_STRIP) + break; + + sectors = cmd->data_length / cmd->se_dev->dev_attrib.block_size; + cmd->pi_err = sbc_dif_verify_write(cmd, cmd->t_task_lba, + sectors, 0, NULL, 0); + if (cmd->pi_err) { + spin_lock_irq(&cmd->t_state_lock); + cmd->transport_state &= ~CMD_T_BUSY|CMD_T_SENT; + spin_unlock_irq(&cmd->t_state_lock); + transport_generic_request_failure(cmd, cmd->pi_err); + return -1; + } + break; default: break; }