mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
scsi: target/core: Make it possible to wait from more than one context for command completion
This patch does not change any functionality but makes the patch that makes TMF handling synchronous easier to read. Cc: Nicholas Bellinger <[email protected]> Cc: Mike Christie <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: David Disseldorp <[email protected]> Cc: Hannes Reinecke <[email protected]> Signed-off-by: Bart Van Assche <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
This commit is contained in:
parent
db5b21a24e
commit
a014c3647a
2 changed files with 11 additions and 6 deletions
|
|
@ -1328,7 +1328,8 @@ void transport_init_se_cmd(
|
|||
INIT_LIST_HEAD(&cmd->se_cmd_list);
|
||||
INIT_LIST_HEAD(&cmd->state_list);
|
||||
init_completion(&cmd->t_transport_stop_comp);
|
||||
cmd->compl = NULL;
|
||||
cmd->free_compl = NULL;
|
||||
cmd->abrt_compl = NULL;
|
||||
spin_lock_init(&cmd->t_state_lock);
|
||||
INIT_WORK(&cmd->work, NULL);
|
||||
kref_init(&cmd->cmd_kref);
|
||||
|
|
@ -2689,7 +2690,7 @@ int transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks)
|
|||
transport_lun_remove_cmd(cmd);
|
||||
}
|
||||
if (aborted)
|
||||
cmd->compl = &compl;
|
||||
cmd->free_compl = &compl;
|
||||
if (!aborted || tas)
|
||||
ret = target_put_sess_cmd(cmd);
|
||||
if (aborted) {
|
||||
|
|
@ -2756,7 +2757,8 @@ static void target_release_cmd_kref(struct kref *kref)
|
|||
{
|
||||
struct se_cmd *se_cmd = container_of(kref, struct se_cmd, cmd_kref);
|
||||
struct se_session *se_sess = se_cmd->se_sess;
|
||||
struct completion *compl = se_cmd->compl;
|
||||
struct completion *free_compl = se_cmd->free_compl;
|
||||
struct completion *abrt_compl = se_cmd->abrt_compl;
|
||||
unsigned long flags;
|
||||
|
||||
if (se_sess) {
|
||||
|
|
@ -2767,8 +2769,10 @@ static void target_release_cmd_kref(struct kref *kref)
|
|||
|
||||
target_free_cmd_mem(se_cmd);
|
||||
se_cmd->se_tfo->release_cmd(se_cmd);
|
||||
if (compl)
|
||||
complete(compl);
|
||||
if (free_compl)
|
||||
complete(free_compl);
|
||||
if (abrt_compl)
|
||||
complete(abrt_compl);
|
||||
|
||||
percpu_ref_put(&se_sess->cmd_count);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue