Re: [PATCH 3/4] qla2xxx: Add DebugFS node for target sess list.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Nic, 


On 2/6/16, 8:40 PM, "Nicholas A. Bellinger" <nab@xxxxxxxxxxxxxxx> wrote:

>Hi Himanshu & Quinn,
>
>On Thu, 2016-02-04 at 11:45 -0500, Himanshu Madhani wrote:
>> From: Quinn Tran <quinn.tran@xxxxxxxxxx>
>> 
>>  #cat  /sys/kernel/debug/qla2xxx/qla2xxx_31/tgt_sess
>>  qla2xxx_31
>>  Port ID   Port Name                Handle
>>  ff:fc:01  21:fd:00:05:33:c7:ec:16  0
>>  01:0e:00  21:00:00:24:ff:7b:8a:e4  1
>>  01:0f:00  21:00:00:24:ff:7b:8a:e5  2
>>  ....
>> 
>> Signed-off-by: Quinn Tran <quinn.tran@xxxxxxxxxx>
>> Signed-off-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx>
>> ---
>>  drivers/scsi/qla2xxx/qla_def.h    |    1 +
>>  drivers/scsi/qla2xxx/qla_dfs.c    |   55
>>++++++++++++++++++++++++++++++++++++
>>  drivers/scsi/qla2xxx/qla_target.c |   56
>>++++++++++++++++++++++++------------
>>  3 files changed, 93 insertions(+), 19 deletions(-)
>> 
>
>So looking at this patch beyond the debugfs part, it does change where
>->check_initiator_node_acl() gets call during qlt_create_sess().
>
>I assume this is related to new debugfs attribute, and these changes
>(plus others in qlt_del_sess_work_fn) are not bug-fixes on their own,
>correct..?
>
>Aside from that, I don't have an objection to merge as v4.6 for-next
>code if QLogic finds it useful for debugging.

Yes. The changes in this patch are strictly for making information
available via debugFS
and not bug-fixes on their own. This information has been requested by few
customer who
finds this information useful for debugging and in addition they use this
information in
their configuration scripts as well.


>
>
>
>> diff --git a/drivers/scsi/qla2xxx/qla_def.h
>>b/drivers/scsi/qla2xxx/qla_def.h
>> index 9872f34..e6c5bcf 100644
>> --- a/drivers/scsi/qla2xxx/qla_def.h
>> +++ b/drivers/scsi/qla2xxx/qla_def.h
>> @@ -2929,6 +2929,7 @@ struct qlt_hw_data {
>>  
>>  	uint8_t tgt_node_name[WWN_SIZE];
>>  
>> +	struct dentry *dfs_tgt_sess;
>>  	struct list_head q_full_list;
>>  	uint32_t num_pend_cmds;
>>  	uint32_t num_qfull_cmds_alloc;
>> diff --git a/drivers/scsi/qla2xxx/qla_dfs.c
>>b/drivers/scsi/qla2xxx/qla_dfs.c
>> index cd8b96a..34272fd 100644
>> --- a/drivers/scsi/qla2xxx/qla_dfs.c
>> +++ b/drivers/scsi/qla2xxx/qla_dfs.c
>> @@ -13,6 +13,47 @@ static struct dentry *qla2x00_dfs_root;
>>  static atomic_t qla2x00_dfs_root_count;
>>  
>>  static int
>> +qla2x00_dfs_tgt_sess_show(struct seq_file *s, void *unused)
>> +{
>> +	scsi_qla_host_t *vha = s->private;
>> +	struct qla_hw_data *ha = vha->hw;
>> +	unsigned long flags;
>> +	struct qla_tgt_sess *sess = NULL;
>> +	struct qla_tgt *tgt= vha->vha_tgt.qla_tgt;
>> +
>> +	seq_printf(s, "%s\n",vha->host_str);
>> +	if (tgt) {
>> +		seq_printf(s, "Port ID   Port Name                Handle\n");
>> +
>> +		spin_lock_irqsave(&ha->tgt.sess_lock, flags);
>> +		list_for_each_entry(sess, &tgt->sess_list, sess_list_entry) {
>> +			seq_printf(s, "%02x:%02x:%02x  %8phC  %d\n",
>> +					   sess->s_id.b.domain,sess->s_id.b.area,
>> +					   sess->s_id.b.al_pa,	sess->port_name,
>> +					   sess->loop_id);
>> +		}
>> +		spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>> +static int
>> +qla2x00_dfs_tgt_sess_open(struct inode *inode, struct file *file)
>> +{
>> +	scsi_qla_host_t *vha = inode->i_private;
>> +	return single_open(file, qla2x00_dfs_tgt_sess_show, vha);
>> +}
>> +
>> +
>> +static const struct file_operations dfs_tgt_sess_ops = {
>> +	.open		= qla2x00_dfs_tgt_sess_open,
>> +	.read		= seq_read,
>> +	.llseek		= seq_lseek,
>> +	.release	= single_release,
>> +};
>> +
>> +static int
>>  qla_dfs_fw_resource_cnt_show(struct seq_file *s, void *unused)
>>  {
>>  	struct scsi_qla_host *vha = s->private;
>> @@ -248,6 +289,15 @@ create_nodes:
>>  		    "Unable to create debugfs fce node.\n");
>>  		goto out;
>>  	}
>> +
>> +	ha->tgt.dfs_tgt_sess = debugfs_create_file("tgt_sess",
>> +		S_IRUSR, ha->dfs_dir, vha, &dfs_tgt_sess_ops);
>> +	if (!ha->tgt.dfs_tgt_sess) {
>> +		ql_log(ql_log_warn, vha, 0xffff,
>> +			"Unable to create debugFS tgt_sess node.\n");
>> +		goto out;
>> +	}
>> +
>>  out:
>>  	return 0;
>>  }
>> @@ -257,6 +307,11 @@ qla2x00_dfs_remove(scsi_qla_host_t *vha)
>>  {
>>  	struct qla_hw_data *ha = vha->hw;
>>  
>> +	if (ha->tgt.dfs_tgt_sess) {
>> +		debugfs_remove(ha->tgt.dfs_tgt_sess);
>> +		ha->tgt.dfs_tgt_sess = NULL;
>> +	}
>> +
>>  	if (ha->dfs_fw_resource_cnt) {
>>  		debugfs_remove(ha->dfs_fw_resource_cnt);
>>  		ha->dfs_fw_resource_cnt = NULL;
>> diff --git a/drivers/scsi/qla2xxx/qla_target.c
>>b/drivers/scsi/qla2xxx/qla_target.c
>> index 46c6679..a754aa4 100644
>> --- a/drivers/scsi/qla2xxx/qla_target.c
>> +++ b/drivers/scsi/qla2xxx/qla_target.c
>> @@ -641,7 +641,8 @@ void qlt_unreg_sess(struct qla_tgt_sess *sess)
>>  {
>>  	struct scsi_qla_host *vha = sess->vha;
>>  
>> -	vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess);
>> +	if (sess->se_sess)
>> +		vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess);
>>  
>>  	if (!list_empty(&sess->del_list_entry))
>>  		list_del_init(&sess->del_list_entry);
>> @@ -856,8 +857,12 @@ static void qlt_del_sess_work_fn(struct
>>delayed_work *work)
>>  			ql_dbg(ql_dbg_tgt_mgt, vha, 0xf004,
>>  			    "Timeout: sess %p about to be deleted\n",
>>  			    sess);
>> -			ha->tgt.tgt_ops->shutdown_sess(sess);
>> -			ha->tgt.tgt_ops->put_sess(sess);
>> +			if (sess->se_sess) {
>> +				ha->tgt.tgt_ops->shutdown_sess(sess);
>> +				ha->tgt.tgt_ops->put_sess(sess);
>> +			} else {
>> +				qlt_unreg_sess(sess);
>> +			}
>>  		} else {
>>  			schedule_delayed_work(&tgt->sess_del_work,
>>  			    sess->expires - elapsed);
>> @@ -905,6 +910,19 @@ static struct qla_tgt_sess *qlt_create_sess(
>>  			if (sess->deleted)
>>  				qlt_undelete_sess(sess);
>>  
>> +			if (!sess->se_sess) {
>> +				be_sid[0] = sess->s_id.b.domain;
>> +				be_sid[1] = sess->s_id.b.area;
>> +				be_sid[2] = sess->s_id.b.al_pa;
>> +
>> +				if (ha->tgt.tgt_ops->check_initiator_node_acl
>> +				    (vha, &sess->port_name[0], sess, &be_sid[0],
>> +				     sess->loop_id) < 0) {
>> +					spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
>> +					return NULL;
>> +				}
>> +			}
>> +
>>  			kref_get(&sess->se_sess->sess_kref);
>>  			ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id,
>>  						(fcport->flags & FCF_CONF_COMP_SUPPORTED));
>> @@ -951,22 +969,6 @@ static struct qla_tgt_sess *qlt_create_sess(
>>  	be_sid[0] = sess->s_id.b.domain;
>>  	be_sid[1] = sess->s_id.b.area;
>>  	be_sid[2] = sess->s_id.b.al_pa;
>> -	/*
>> -	 * Determine if this fc_port->port_name is allowed to access
>> -	 * target mode using explict NodeACLs+MappedLUNs, or using
>> -	 * TPG demo mode.  If this is successful a target mode FC nexus
>> -	 * is created.
>> -	 */
>> -	if (ha->tgt.tgt_ops->check_initiator_node_acl(vha,
>> -	    &fcport->port_name[0], sess, &be_sid[0], fcport->loop_id) < 0) {
>> -		kfree(sess);
>> -		return NULL;
>> -	}
>> -	/*
>> -	 * Take an extra reference to ->sess_kref here to handle qla_tgt_sess
>> -	 * access across ->tgt.sess_lock reaquire.
>> -	 */
>> -	kref_get(&sess->se_sess->sess_kref);
>>  
>>  	sess->conf_compl_supported = (fcport->flags &
>>FCF_CONF_COMP_SUPPORTED);
>>  	BUILD_BUG_ON(sizeof(sess->port_name) != sizeof(fcport->port_name));
>> @@ -985,6 +987,22 @@ static struct qla_tgt_sess *qlt_create_sess(
>>  	    fcport->loop_id, sess->s_id.b.domain, sess->s_id.b.area,
>>  	    sess->s_id.b.al_pa, sess->conf_compl_supported ?  "" : "not ");
>>  
>> +	/*
>> +	 * Determine if this fc_port->port_name is allowed to access
>> +	 * target mode using explict NodeACLs+MappedLUNs, or using
>> +	 * TPG demo mode.  If this is successful a target mode FC nexus
>> +	 * is created.
>> +	 */
>> +	if (ha->tgt.tgt_ops->check_initiator_node_acl(vha,
>> +	    &fcport->port_name[0], sess, &be_sid[0], fcport->loop_id) < 0)
>> +		return NULL;
>> +	else
>> +		/*
>> +		 * Take an extra reference to ->sess_kref here to handle qla_tgt_sess
>> +		 * access across ->tgt.sess_lock reaquire.
>> +		 */
>> +		kref_get(&sess->se_sess->sess_kref);
>> +
>>  	return sess;
>>  }
>>  
>
>

<<attachment: winmail.dat>>


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux