From patchwork Wed Jun 17 06:06:04 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: 6621911 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 47111C0020 for ; Wed, 17 Jun 2015 06:06:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1C05F2080E for ; Wed, 17 Jun 2015 06:06:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2350E2080D for ; Wed, 17 Jun 2015 06:06:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751313AbbFQGGI (ORCPT ); Wed, 17 Jun 2015 02:06:08 -0400 Received: from mail.linux-iscsi.org ([67.23.28.174]:49929 "EHLO linux-iscsi.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752428AbbFQGGG (ORCPT ); Wed, 17 Jun 2015 02:06:06 -0400 Received: from [192.168.1.67] (75-37-194-224.lightspeed.lsatca.sbcglobal.net [75.37.194.224]) (using SSLv3 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: nab) by linux-iscsi.org (Postfix) with ESMTPSA id 558A222DB87; Wed, 17 Jun 2015 06:02:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=linux-iscsi.org; s=default.private; t=1434520964; bh=jYJi35jiR4B6ewWtKGLYmpm+GjmN+gN QaWm6PjwnQ6A=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To: References:Content-Type:Mime-Version:Content-Transfer-Encoding; b=K1nY7vBg/ctetYnQjBy1Q4pepkVXCa8E5HPuC1cE6YLItvlF8gGMLI8pE9q3321Mk B6RtmDXoePoT+WTHiP80vBVO/wUp2cDMo6DrTKWtaxneaJVOu64Ys4Ty/4CDBTOJIYd Lt+u9G1HvWWWbE0VcTpWWze+7Ebp+uq/Om8MPWU= Message-ID: <1434521164.7916.182.camel@haakon3.risingtidesystems.com> Subject: Re: [PATCH 3/6] target: use 'se_dev_entry' when allocating UAs From: "Nicholas A. Bellinger" To: Hannes Reinecke Cc: Nic Bellinger , target-devel@vger.kernel.org, linux-scsi@vger.kernel.org, Christoph Hellwig Date: Tue, 16 Jun 2015 23:06:04 -0700 In-Reply-To: <1434009689-112909-4-git-send-email-hare@suse.de> References: <1434009689-112909-1-git-send-email-hare@suse.de> <1434009689-112909-4-git-send-email-hare@suse.de> X-Mailer: Evolution 3.4.4-1 Mime-Version: 1.0 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Spam-Status: No, score=-7.4 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 Hey Hannes, Apologies for the delayed follow-up on these, one comment below. On Thu, 2015-06-11 at 10:01 +0200, Hannes Reinecke wrote: > We need to use 'se_dev_entry' as argument when allocating > UAs, otherwise we'll never see any UAs for an implicit > ALUA state transition triggered from userspace. > > Signed-off-by: Hannes Reinecke > --- > drivers/target/target_core_alua.c | 27 ++++++++++++++++++--------- > drivers/target/target_core_pr.c | 31 +++++++++++++++++++++++++------ > drivers/target/target_core_transport.c | 18 ++++++++++++------ > drivers/target/target_core_ua.c | 23 +++-------------------- > drivers/target/target_core_ua.h | 2 +- > 5 files changed, 59 insertions(+), 42 deletions(-) > > diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c > index 436e30b..bb28a97 100644 > --- a/drivers/target/target_core_pr.c > +++ b/drivers/target/target_core_pr.c > @@ -125,6 +125,25 @@ static struct t10_pr_registration *core_scsi3_locate_pr_reg(struct se_device *, > struct se_node_acl *, struct se_session *); > static void core_scsi3_put_pr_reg(struct t10_pr_registration *); > > +static void core_scsi3_pr_ua_allocate(struct se_node_acl *nacl, > + u32 unpacked_lun, u8 asc, u8 ascq) > +{ > + struct se_dev_entry *deve; > + > + if (!nacl) > + return; > + > + rcu_read_lock(); > + deve = target_nacl_find_deve(nacl, unpacked_lun); > + if (!deve) { > + rcu_read_unlock(); > + return; > + } > + > + core_scsi3_ua_allocate(deve, asc, ascq); > + rcu_read_unlock(); > +} > + This should be common for TCM_RESERVATION_CONFLICT case outside of PR code too. Any objections for squashing the following into your original patch..? Thank you, --nab --- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c index bb28a97..0bb3292 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c @@ -125,25 +125,6 @@ static struct t10_pr_registration *core_scsi3_locate_pr_reg(struct se_device *, struct se_node_acl *, struct se_session *); static void core_scsi3_put_pr_reg(struct t10_pr_registration *); -static void core_scsi3_pr_ua_allocate(struct se_node_acl *nacl, - u32 unpacked_lun, u8 asc, u8 ascq) -{ - struct se_dev_entry *deve; - - if (!nacl) - return; - - rcu_read_lock(); - deve = target_nacl_find_deve(nacl, unpacked_lun); - if (!deve) { - rcu_read_unlock(); - return; - } - - core_scsi3_ua_allocate(deve, asc, ascq); - rcu_read_unlock(); -} - static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd) { struct se_session *se_sess = cmd->se_sess; @@ -2216,7 +2197,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key, &pr_tmpl->registration_list, pr_reg_list) { - core_scsi3_pr_ua_allocate( + target_ua_allocate_lun( pr_reg_p->pr_reg_nacl, pr_reg_p->pr_res_mapped_lun, 0x2A, @@ -2643,7 +2624,7 @@ core_scsi3_emulate_pro_release(struct se_cmd *cmd, int type, int scope, if (pr_reg_p == pr_reg) continue; - core_scsi3_pr_ua_allocate(pr_reg_p->pr_reg_nacl, + target_ua_allocate_lun(pr_reg_p->pr_reg_nacl, pr_reg_p->pr_res_mapped_lun, 0x2A, ASCQ_2AH_RESERVATIONS_RELEASED); } @@ -2728,7 +2709,7 @@ core_scsi3_emulate_pro_clear(struct se_cmd *cmd, u64 res_key) * additional sense code set to RESERVATIONS PREEMPTED. */ if (!calling_it_nexus) - core_scsi3_pr_ua_allocate(pr_reg_nacl, pr_res_mapped_lun, + target_ua_allocate_lun(pr_reg_nacl, pr_res_mapped_lun, 0x2A, ASCQ_2AH_RESERVATIONS_PREEMPTED); } spin_unlock(&pr_tmpl->registration_lock); @@ -2937,7 +2918,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key, NULL, 0); } if (!calling_it_nexus) - core_scsi3_pr_ua_allocate(pr_reg_nacl, + target_ua_allocate_lun(pr_reg_nacl, pr_res_mapped_lun, 0x2A, ASCQ_2AH_REGISTRATIONS_PREEMPTED); } @@ -3043,7 +3024,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key, * persistent reservation and/or registration, with the * additional sense code set to REGISTRATIONS PREEMPTED; */ - core_scsi3_pr_ua_allocate(pr_reg_nacl, pr_res_mapped_lun, 0x2A, + target_ua_allocate_lun(pr_reg_nacl, pr_res_mapped_lun, 0x2A, ASCQ_2AH_REGISTRATIONS_PREEMPTED); } spin_unlock(&pr_tmpl->registration_lock); @@ -3076,7 +3057,7 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key, if (calling_it_nexus) continue; - core_scsi3_pr_ua_allocate(pr_reg->pr_reg_nacl, + target_ua_allocate_lun(pr_reg->pr_reg_nacl, pr_reg->pr_res_mapped_lun, 0x2A, ASCQ_2AH_RESERVATIONS_RELEASED); } diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index bd63254..201c33c 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1678,15 +1678,9 @@ void transport_generic_request_failure(struct se_cmd *cmd, */ if (cmd->se_sess && cmd->se_dev->dev_attrib.emulate_ua_intlck_ctrl == 2) { - struct se_dev_entry *deve; - - rcu_read_lock(); - deve = target_nacl_find_deve(cmd->se_sess->se_node_acl, - cmd->orig_fe_lun); - if (deve) - core_scsi3_ua_allocate(deve, 0x2C, + target_ua_allocate_lun(cmd->se_sess->se_node_acl, + cmd->orig_fe_lun, 0x2C, ASCQ_2CH_PREVIOUS_RESERVATION_CONFLICT_STATUS); - rcu_read_unlock(); } trace_target_cmd_complete(cmd); ret = cmd->se_tfo->queue_status(cmd); diff --git a/drivers/target/target_core_ua.c b/drivers/target/target_core_ua.c index e97a708..fc095ae 100644 --- a/drivers/target/target_core_ua.c +++ b/drivers/target/target_core_ua.c @@ -169,6 +169,25 @@ int core_scsi3_ua_allocate( return 0; } +void target_ua_allocate_lun(struct se_node_acl *nacl, + u32 unpacked_lun, u8 asc, u8 ascq) +{ + struct se_dev_entry *deve; + + if (!nacl) + return; + + rcu_read_lock(); + deve = target_nacl_find_deve(nacl, unpacked_lun); + if (!deve) { + rcu_read_unlock(); + return; + } + + core_scsi3_ua_allocate(deve, asc, ascq); + rcu_read_unlock(); +} + void core_scsi3_ua_release_all( struct se_dev_entry *deve) { diff --git a/drivers/target/target_core_ua.h b/drivers/target/target_core_ua.h index 45e3b6d..bd6e78b 100644 --- a/drivers/target/target_core_ua.h +++ b/drivers/target/target_core_ua.h @@ -32,6 +32,7 @@ extern struct kmem_cache *se_ua_cache; extern sense_reason_t target_scsi3_ua_check(struct se_cmd *); extern int core_scsi3_ua_allocate(struct se_dev_entry *, u8, u8); +extern void target_ua_allocate_lun(struct se_node_acl *, u32, u8, u8); extern void core_scsi3_ua_release_all(struct se_dev_entry *); extern void core_scsi3_ua_for_check_condition(struct se_cmd *, u8 *, u8 *); extern int core_scsi3_ua_clear_for_request_sense(struct se_cmd *,