Re: [PATCH 7/7] target: Remove se_session.sess_wait_list

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

 



On Mon, 2012-07-16 at 11:04 -0700, Roland Dreier wrote:
> From: Roland Dreier <roland@xxxxxxxxxxxxxxx>
> 
> Since we set se_session.sess_tearing_down and stop new commands from
> being added to se_session.sess_cmd_list before we wait for commands to
> finish when freeing a session, there's no need for a separate
> sess_wait_list -- if we let new commands be added to sess_cmd_list
> after setting sess_tearing_down, that would be a bug that breaks the
> logic of waiting in-flight commands.
> 
> Also rename target_splice_sess_cmd_list() to
> target_sess_cmd_list_set_waiting(), since we are no longer splicing
> onto a separate list.
> 

So it looks reasonable to drop this cruft now, aside from the
target_get_sess_cmd() failure bit that still needs to be worked out
for-3.6 code.

Nice work Roland & Pure folks!

> 
> 
> Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx>
> ---
>  drivers/scsi/qla2xxx/tcm_qla2xxx.c     |    2 +-
>  drivers/target/target_core_transport.c |   22 ++++++++++------------
>  include/target/target_core_base.h      |    1 -
>  include/target/target_core_fabric.h    |    2 +-
>  4 files changed, 12 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> index 7db7ca7..72f3557 100644
> --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> @@ -466,7 +466,7 @@ static int tcm_qla2xxx_shutdown_session(struct se_session *se_sess)
>  	vha = sess->vha;
>  
>  	spin_lock_irqsave(&vha->hw->hardware_lock, flags);
> -	target_splice_sess_cmd_list(se_sess);
> +	target_sess_cmd_list_set_waiting(se_sess);
>  	spin_unlock_irqrestore(&vha->hw->hardware_lock, flags);
>  
>  	return 1;
> diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
> index 23e6e2d..7b3359e 100644
> --- a/drivers/target/target_core_transport.c
> +++ b/drivers/target/target_core_transport.c
> @@ -244,7 +244,6 @@ struct se_session *transport_init_session(void)
>  	INIT_LIST_HEAD(&se_sess->sess_list);
>  	INIT_LIST_HEAD(&se_sess->sess_acl_list);
>  	INIT_LIST_HEAD(&se_sess->sess_cmd_list);
> -	INIT_LIST_HEAD(&se_sess->sess_wait_list);
>  	spin_lock_init(&se_sess->sess_cmd_lock);
>  	kref_init(&se_sess->sess_kref);
>  
> @@ -3719,28 +3718,27 @@ int target_put_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd)
>  }
>  EXPORT_SYMBOL(target_put_sess_cmd);
>  
> -/* target_splice_sess_cmd_list - Split active cmds into sess_wait_list
> - * @se_sess:	session to split
> +/* target_sess_cmd_list_set_waiting - Flag all commands in
> + *         sess_cmd_list to complete cmd_wait_comp.  Set
> + *         sess_tearing_down so no more commands are queued.
> + * @se_sess:	session to flag
>   */
> -void target_splice_sess_cmd_list(struct se_session *se_sess)
> +void target_sess_cmd_list_set_waiting(struct se_session *se_sess)
>  {
>  	struct se_cmd *se_cmd;
>  	unsigned long flags;
>  
> -	WARN_ON(!list_empty(&se_sess->sess_wait_list));
> -	INIT_LIST_HEAD(&se_sess->sess_wait_list);
> -
>  	spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
> -	se_sess->sess_tearing_down = 1;
>  
> -	list_splice_init(&se_sess->sess_cmd_list, &se_sess->sess_wait_list);
> +	WARN_ON(se_sess->sess_tearing_down);
> +	se_sess->sess_tearing_down = 1;
>  
> -	list_for_each_entry(se_cmd, &se_sess->sess_wait_list, se_cmd_list)
> +	list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list)
>  		se_cmd->cmd_wait_set = 1;
>  
>  	spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
>  }
> -EXPORT_SYMBOL(target_splice_sess_cmd_list);
> +EXPORT_SYMBOL(target_sess_cmd_list_set_waiting);
>  
>  /* target_wait_for_sess_cmds - Wait for outstanding descriptors
>   * @se_sess:    session to wait for active I/O
> @@ -3754,7 +3752,7 @@ void target_wait_for_sess_cmds(
>  	bool rc = false;
>  
>  	list_for_each_entry_safe(se_cmd, tmp_cmd,
> -				&se_sess->sess_wait_list, se_cmd_list) {
> +				&se_sess->sess_cmd_list, se_cmd_list) {
>  		list_del(&se_cmd->se_cmd_list);
>  
>  		pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:"
> diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
> index dc35d86..5d8907e 100644
> --- a/include/target/target_core_base.h
> +++ b/include/target/target_core_base.h
> @@ -633,7 +633,6 @@ struct se_session {
>  	struct list_head	sess_list;
>  	struct list_head	sess_acl_list;
>  	struct list_head	sess_cmd_list;
> -	struct list_head	sess_wait_list;
>  	spinlock_t		sess_cmd_lock;
>  	struct kref		sess_kref;
>  };
> diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
> index 4f8e515..86d8a4a 100644
> --- a/include/target/target_core_fabric.h
> +++ b/include/target/target_core_fabric.h
> @@ -130,7 +130,7 @@ int	transport_check_aborted_status(struct se_cmd *, int);
>  int	transport_send_check_condition_and_sense(struct se_cmd *, u8, int);
>  
>  int	target_put_sess_cmd(struct se_session *, struct se_cmd *);
> -void	target_splice_sess_cmd_list(struct se_session *);
> +void	target_sess_cmd_list_set_waiting(struct se_session *);
>  void	target_wait_for_sess_cmds(struct se_session *, int);
>  
>  int	core_alua_check_nonop_delay(struct se_cmd *);


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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