From patchwork Fri Mar 11 06:30:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nicholas A. Bellinger" X-Patchwork-Id: 8562401 Return-Path: X-Original-To: patchwork-linux-scsi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 8971FC0553 for ; Fri, 11 Mar 2016 06:35:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 76D102026D for ; Fri, 11 Mar 2016 06:35:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 58DF02035E for ; Fri, 11 Mar 2016 06:34:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934064AbcCKGe5 (ORCPT ); Fri, 11 Mar 2016 01:34:57 -0500 Received: from mail-ob0-f176.google.com ([209.85.214.176]:36328 "EHLO mail-ob0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934028AbcCKGex (ORCPT ); Fri, 11 Mar 2016 01:34:53 -0500 Received: by mail-ob0-f176.google.com with SMTP id m7so104029542obh.3 for ; Thu, 10 Mar 2016 22:34:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daterainc-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6A2+xaaSPGkNPTBhfaYTB6mMZIYiqJW0u+djY4Jf40U=; b=Jj2yif55W74frVvhRc0RqKcPP1mfeyFSbEDQzOUnyTaHGyEnWsupdumZylgoL87B7m knqofBnzS/U00wxYMdIJHba1sVimGxvs2EZ9G9pmWtdCICA2vM3pw2YaA/y4vDskNGYB MPyB/S81KYEJBzlCJKTGJkZP6ngMAZqUhkniBH2zxBiR0Gd5FoHSvMITRQzUg66FMoy4 AUTZ7AWn6MQIRF5sp3WnaYr0dSwhX3nvh81uxkIxCQQJ2xU5vrw1oOwBpRggBB//dY63 PZc5rjG7xSdzsvYUdt8nKS3A7ttZrcKV1chbS3GPS52Txtphu0NKQ/1IEs350dwuF2uy U/hQ== 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=6A2+xaaSPGkNPTBhfaYTB6mMZIYiqJW0u+djY4Jf40U=; b=XMUvpsxOyKWdi3iYWbW1ZEalDtc3wfaQ5Hqyynb8PwnOoB7lGSlloA1vEWULIP/l71 y/x6XJ+DH8wPC8+sLQqnuxGM/MQh4LoGDQekiagk6CF27o77lpszf43HFMrliNE+vBno NDlhlT5K/NdQn3YQcIwY3/JZDuYjdKV109jDZaZMTMvJgE6OYxxGsHaRbE5qXGsdMeZA X47aVPpzIOuwb3ziGypnUf4ehuEU9u0H0cRnE2DJLKi4HOrSJW04qfLXvO/y3IesJooT mBfeWrQ597wMnSMaVnQbMgx7SCu3XF61JGu9TTpSRiqdoOTOsfEu+FbeSLM06Uardgaq 0kfg== X-Gm-Message-State: AD7BkJLWi0BF6uaPsxWF2NeaDOS+xTFP7FjN2GTrpzx57fAIRfXpvA+T936LPy+hTWvk2w== X-Received: by 10.60.51.135 with SMTP id k7mr4812705oeo.42.1457678092184; Thu, 10 Mar 2016 22:34:52 -0800 (PST) Received: from localhost.localdomain (mail.linux-iscsi.org. [67.23.28.174]) by smtp.gmail.com with ESMTPSA id s81sm3540631oif.0.2016.03.10.22.34.51 (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 10 Mar 2016 22:34:51 -0800 (PST) From: "Nicholas A. Bellinger" To: target-devel Cc: linux-scsi , Christoph Hellwig , Hannes Reinecke , Mike Christie , Sagi Grimberg , Andy Grover , Sebastian Andrzej Siewior , Juergen Gross , Andrzej Pietrasiewicz , Chris Boot , Felipe Balbi , Nicholas Bellinger , David Vrabel Subject: [PATCH-v4 12/14] xen-scsiback: Convert to TARGET_SCF_ACK_KREF I/O krefs Date: Fri, 11 Mar 2016 06:30:08 +0000 Message-Id: <1457677810-2478-13-git-send-email-nab@daterainc.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1457677810-2478-1-git-send-email-nab@daterainc.com> References: <1457677810-2478-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.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,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 converts xen-scsiback to modern TARGET_SCF_ACK_KREF usage for scsiback_cmd_done() callback path. It also also converts TMR -> scsiback_device_action() to use modern target_submit_tmr() code. Acked-by: Juergen Gross Tested-by: Juergen Gross Cc: Hannes Reinecke Cc: David Vrabel Signed-off-by: Nicholas Bellinger --- drivers/xen/xen-scsiback.c | 56 +++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 3f379f7..652c8ce 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -388,6 +388,12 @@ static void scsiback_cmd_done(struct vscsibk_pend *pending_req) scsiback_fast_flush_area(pending_req); scsiback_do_resp_with_sense(sense_buffer, errors, resid, pending_req); scsiback_put(info); + /* + * Drop the extra KREF_ACK reference taken by target_submit_cmd_map_sgls() + * ahead of scsiback_check_stop_free() -> transport_generic_free_cmd() + * final se_cmd->cmd_kref put. + */ + target_put_sess_cmd(&pending_req->se_cmd); } static void scsiback_cmd_exec(struct vscsibk_pend *pending_req) @@ -401,7 +407,7 @@ static void scsiback_cmd_exec(struct vscsibk_pend *pending_req) rc = target_submit_cmd_map_sgls(se_cmd, sess, pending_req->cmnd, pending_req->sense_buffer, pending_req->v2p->lun, pending_req->data_len, 0, - pending_req->sc_data_direction, 0, + pending_req->sc_data_direction, TARGET_SCF_ACK_KREF, pending_req->sgl, pending_req->n_sg, NULL, 0, NULL, 0); if (rc < 0) { @@ -590,31 +596,28 @@ static void scsiback_disconnect(struct vscsibk_info *info) static void scsiback_device_action(struct vscsibk_pend *pending_req, enum tcm_tmreq_table act, int tag) { - int rc, err = FAILED; struct scsiback_tpg *tpg = pending_req->v2p->tpg; + struct scsiback_nexus *nexus = tpg->tpg_nexus; struct se_cmd *se_cmd = &pending_req->se_cmd; struct scsiback_tmr *tmr; + u64 unpacked_lun = pending_req->v2p->lun; + int rc, err = FAILED; tmr = kzalloc(sizeof(struct scsiback_tmr), GFP_KERNEL); - if (!tmr) - goto out; + if (!tmr) { + target_put_sess_cmd(se_cmd); + goto err; + } init_waitqueue_head(&tmr->tmr_wait); - transport_init_se_cmd(se_cmd, tpg->se_tpg.se_tpg_tfo, - tpg->tpg_nexus->tvn_se_sess, 0, DMA_NONE, TCM_SIMPLE_TAG, - &pending_req->sense_buffer[0]); - - rc = core_tmr_alloc_req(se_cmd, tmr, act, GFP_KERNEL); - if (rc < 0) - goto out; - - se_cmd->se_tmr_req->ref_task_tag = tag; - - if (transport_lookup_tmr_lun(se_cmd, pending_req->v2p->lun) < 0) - goto out; + rc = target_submit_tmr(&pending_req->se_cmd, nexus->tvn_se_sess, + &pending_req->sense_buffer[0], + unpacked_lun, tmr, act, GFP_KERNEL, + tag, TARGET_SCF_ACK_KREF); + if (rc) + goto err; - transport_generic_handle_tmr(se_cmd); wait_event(tmr->tmr_wait, atomic_read(&tmr->tmr_complete)); err = (se_cmd->se_tmr_req->response == TMR_FUNCTION_COMPLETE) ? @@ -623,7 +626,7 @@ static void scsiback_device_action(struct vscsibk_pend *pending_req, scsiback_do_resp_with_sense(NULL, err, 0, pending_req); transport_generic_free_cmd(&pending_req->se_cmd, 1); return; -out: +err: if (tmr) kfree(tmr); scsiback_do_resp_with_sense(NULL, err, 0, pending_req); @@ -1368,21 +1371,18 @@ static u32 scsiback_tpg_get_inst_index(struct se_portal_group *se_tpg) static int scsiback_check_stop_free(struct se_cmd *se_cmd) { - /* - * Do not release struct se_cmd's containing a valid TMR pointer. - * These will be released directly in scsiback_device_action() - * with transport_generic_free_cmd(). - */ - if (se_cmd->se_cmd_flags & SCF_SCSI_TMR_CDB) - return 0; - - transport_generic_free_cmd(se_cmd, 0); - return 1; + return transport_generic_free_cmd(se_cmd, 0); } static void scsiback_release_cmd(struct se_cmd *se_cmd) { struct se_session *se_sess = se_cmd->se_sess; + struct se_tmr_req *se_tmr = se_cmd->se_tmr_req; + + if (se_tmr && se_cmd->se_cmd_flags & SCF_SCSI_TMR_CDB) { + struct scsiback_tmr *tmr = se_tmr->fabric_tmr_ptr; + kfree(tmr); + } percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); }