diff mbox

[v4,31/37] target: Change return type of transport_wait_for_tasks() into void

Message ID 20170208222507.25715-32-bart.vanassche@sandisk.com (mailing list archive)
State Superseded
Headers show

Commit Message

Bart Van Assche Feb. 8, 2017, 10:25 p.m. UTC
None of the callers of this function uses the returned value. Hence
change the return type into void.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Andy Grover <agrover@redhat.com>
Cc: David Disseldorp <ddiss@suse.de>
---
 drivers/target/target_core_transport.c | 21 ++++++++-------------
 include/target/target_core_fabric.h    |  2 +-
 2 files changed, 9 insertions(+), 14 deletions(-)

Comments

Nicholas A. Bellinger Feb. 9, 2017, 11:17 a.m. UTC | #1
On Wed, 2017-02-08 at 14:25 -0800, Bart Van Assche wrote:
> None of the callers of this function uses the returned value. Hence
> change the return type into void.
> 
> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
> Reviewed-by: Hannes Reinecke <hare@suse.com>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Andy Grover <agrover@redhat.com>
> Cc: David Disseldorp <ddiss@suse.de>
> ---
>  drivers/target/target_core_transport.c | 21 ++++++++-------------
>  include/target/target_core_fabric.h    |  2 +-
>  2 files changed, 9 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
> index f6d38eba139e..fdd06ecacd52 100644
> --- a/drivers/target/target_core_transport.c
> +++ b/drivers/target/target_core_transport.c
> @@ -2488,7 +2488,7 @@ static void transport_write_pending_qf(struct se_cmd *cmd)
>  	}
>  }
>  
> -static bool
> +static void
>  __transport_wait_for_tasks(struct se_cmd *, bool, unsigned long *flags);
>  
>  static void target_wait_free_cmd(struct se_cmd *cmd)
> @@ -2711,7 +2711,7 @@ void transport_clear_lun_ref(struct se_lun *lun)
>  	wait_for_completion(&lun->lun_ref_comp);
>  }
>  
> -static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
> +static void __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
>  				       unsigned long *flags)
>  	__releases(&cmd->t_state_lock)
>  	__acquires(&cmd->t_state_lock)
> @@ -2725,17 +2725,17 @@ static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
>  
>  	if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD) &&
>  	    !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB))
> -		return false;
> +		return;
>  
>  	if (!(cmd->se_cmd_flags & SCF_SUPPORTED_SAM_OPCODE) &&
>  	    !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB))
> -		return false;
> +		return;
>  
>  	if (!(cmd->transport_state & CMD_T_ACTIVE))
> -		return false;
> +		return;
>  
>  	if (fabric_stop && (cmd->transport_state & CMD_T_ABORTED))
> -		return false;
> +		return;
>  
>  	cmd->transport_state |= CMD_T_STOP;
>  
> @@ -2752,24 +2752,19 @@ static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
>  
>  	pr_debug("wait_for_tasks: Stopped wait_for_completion(&cmd->"
>  		 "t_transport_stop_comp) for ITT: 0x%08llx\n", cmd->tag);
> -
> -	return true;
>  }
>  

The return value is still required for the second order issue handling,
so transport_generic_free_cmd() can know when it must block on
se_cmd->cmd_wait_comp and invoke se_tfo->release_cmd() directly, before
returning to the caller and allowing session resource release to
proceed.

As described in patch #14, forward progress can't be made when
se_cmd->cmd_wait_comp blocks while still holding se_cmd->cmd_kref.

Because of that basic flaw, dropping this patch for now.

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

Patch

diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index f6d38eba139e..fdd06ecacd52 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -2488,7 +2488,7 @@  static void transport_write_pending_qf(struct se_cmd *cmd)
 	}
 }
 
-static bool
+static void
 __transport_wait_for_tasks(struct se_cmd *, bool, unsigned long *flags);
 
 static void target_wait_free_cmd(struct se_cmd *cmd)
@@ -2711,7 +2711,7 @@  void transport_clear_lun_ref(struct se_lun *lun)
 	wait_for_completion(&lun->lun_ref_comp);
 }
 
-static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
+static void __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
 				       unsigned long *flags)
 	__releases(&cmd->t_state_lock)
 	__acquires(&cmd->t_state_lock)
@@ -2725,17 +2725,17 @@  static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
 
 	if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD) &&
 	    !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB))
-		return false;
+		return;
 
 	if (!(cmd->se_cmd_flags & SCF_SUPPORTED_SAM_OPCODE) &&
 	    !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB))
-		return false;
+		return;
 
 	if (!(cmd->transport_state & CMD_T_ACTIVE))
-		return false;
+		return;
 
 	if (fabric_stop && (cmd->transport_state & CMD_T_ABORTED))
-		return false;
+		return;
 
 	cmd->transport_state |= CMD_T_STOP;
 
@@ -2752,24 +2752,19 @@  static bool __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop,
 
 	pr_debug("wait_for_tasks: Stopped wait_for_completion(&cmd->"
 		 "t_transport_stop_comp) for ITT: 0x%08llx\n", cmd->tag);
-
-	return true;
 }
 
 /**
  * transport_wait_for_tasks - set CMD_T_STOP and wait for t_transport_stop_comp
  * @cmd: command to wait on
  */
-bool transport_wait_for_tasks(struct se_cmd *cmd)
+void transport_wait_for_tasks(struct se_cmd *cmd)
 {
 	unsigned long flags;
-	bool ret;
 
 	spin_lock_irqsave(&cmd->t_state_lock, flags);
-	ret = __transport_wait_for_tasks(cmd, false, &flags);
+	__transport_wait_for_tasks(cmd, false, &flags);
 	spin_unlock_irqrestore(&cmd->t_state_lock, flags);
-
-	return ret;
 }
 EXPORT_SYMBOL(transport_wait_for_tasks);
 
diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
index 25bfdd0d24b0..1e0b4cbd6580 100644
--- a/include/target/target_core_fabric.h
+++ b/include/target/target_core_fabric.h
@@ -151,7 +151,7 @@  void	target_execute_cmd(struct se_cmd *cmd);
 
 int	transport_generic_free_cmd(struct se_cmd *, int);
 
-bool	transport_wait_for_tasks(struct se_cmd *);
+void	transport_wait_for_tasks(struct se_cmd *);
 int	transport_send_check_condition_and_sense(struct se_cmd *,
 		sense_reason_t, int);
 int	target_get_sess_cmd(struct se_cmd *, bool);