Message ID | 20170208222507.25715-32-bart.vanassche@sandisk.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
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 --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);