Commit d17203c4 authored by Bart Van Assche's avatar Bart Van Assche Committed by Nicholas Bellinger

target/tcm_loop: Replace a waitqueue and a counter by a completion

This patch simplifies the implementation of the tcm_loop driver
but does not change its behavior.
Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: David Disseldorp <ddiss@suse.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 4d3895d5
...@@ -239,7 +239,7 @@ static int tcm_loop_issue_tmr(struct tcm_loop_tpg *tl_tpg, ...@@ -239,7 +239,7 @@ static int tcm_loop_issue_tmr(struct tcm_loop_tpg *tl_tpg,
return ret; return ret;
} }
init_waitqueue_head(&tl_cmd->tl_tmr_wait); init_completion(&tl_cmd->tmr_done);
se_cmd = &tl_cmd->tl_se_cmd; se_cmd = &tl_cmd->tl_se_cmd;
se_tpg = &tl_tpg->tl_se_tpg; se_tpg = &tl_tpg->tl_se_tpg;
...@@ -270,7 +270,7 @@ static int tcm_loop_issue_tmr(struct tcm_loop_tpg *tl_tpg, ...@@ -270,7 +270,7 @@ static int tcm_loop_issue_tmr(struct tcm_loop_tpg *tl_tpg,
* tcm_loop_queue_tm_rsp() to wake us up. * tcm_loop_queue_tm_rsp() to wake us up.
*/ */
transport_generic_handle_tmr(se_cmd); transport_generic_handle_tmr(se_cmd);
wait_event(tl_cmd->tl_tmr_wait, atomic_read(&tl_cmd->tmr_complete)); wait_for_completion(&tl_cmd->tmr_done);
/* /*
* The TMR LUN_RESET has completed, check the response status and * The TMR LUN_RESET has completed, check the response status and
* then release allocations. * then release allocations.
...@@ -665,12 +665,8 @@ static void tcm_loop_queue_tm_rsp(struct se_cmd *se_cmd) ...@@ -665,12 +665,8 @@ static void tcm_loop_queue_tm_rsp(struct se_cmd *se_cmd)
struct tcm_loop_cmd *tl_cmd = container_of(se_cmd, struct tcm_loop_cmd *tl_cmd = container_of(se_cmd,
struct tcm_loop_cmd, tl_se_cmd); struct tcm_loop_cmd, tl_se_cmd);
/* /* Wake up tcm_loop_issue_tmr(). */
* The SCSI EH thread will be sleeping on se_tmr->tl_tmr_wait, go ahead complete(&tl_cmd->tmr_done);
* and wake up the wait_queue_head_t in tcm_loop_device_reset()
*/
atomic_set(&tl_cmd->tmr_complete, 1);
wake_up(&tl_cmd->tl_tmr_wait);
} }
static void tcm_loop_aborted_task(struct se_cmd *se_cmd) static void tcm_loop_aborted_task(struct se_cmd *se_cmd)
......
...@@ -16,8 +16,7 @@ struct tcm_loop_cmd { ...@@ -16,8 +16,7 @@ struct tcm_loop_cmd {
/* The TCM I/O descriptor that is accessed via container_of() */ /* The TCM I/O descriptor that is accessed via container_of() */
struct se_cmd tl_se_cmd; struct se_cmd tl_se_cmd;
struct work_struct work; struct work_struct work;
atomic_t tmr_complete; struct completion tmr_done;
wait_queue_head_t tl_tmr_wait;
/* Sense buffer that will be mapped into outgoing status */ /* Sense buffer that will be mapped into outgoing status */
unsigned char tl_sense_buf[TRANSPORT_SENSE_BUFFER]; unsigned char tl_sense_buf[TRANSPORT_SENSE_BUFFER];
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment