]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
target/tcm_loop: Replace a waitqueue and a counter by a completion
authorBart Van Assche <bart.vanassche@sandisk.com>
Tue, 23 May 2017 23:48:40 +0000 (16:48 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Fri, 7 Jul 2017 06:11:24 +0000 (23:11 -0700)
This patch simplifies the implementation of the tcm_loop driver
but does not change its behavior.

Signed-off-by: Bart 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: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/loopback/tcm_loop.c
drivers/target/loopback/tcm_loop.h

index 79776b447b15cd59a6274ed64dd3607cab47665e..27f9127471134df99a20a6c311705cc74eda6e8c 100644 (file)
@@ -239,7 +239,7 @@ static int tcm_loop_issue_tmr(struct tcm_loop_tpg *tl_tpg,
                return ret;
        }
 
-       init_waitqueue_head(&tl_cmd->tl_tmr_wait);
+       init_completion(&tl_cmd->tmr_done);
 
        se_cmd = &tl_cmd->tl_se_cmd;
        se_tpg = &tl_tpg->tl_se_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.
         */
        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
         * then release allocations.
@@ -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_se_cmd);
 
-       /*
-        * The SCSI EH thread will be sleeping on se_tmr->tl_tmr_wait, go ahead
-        * 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);
+       /* Wake up tcm_loop_issue_tmr(). */
+       complete(&tl_cmd->tmr_done);
 }
 
 static void tcm_loop_aborted_task(struct se_cmd *se_cmd)
index 21340781568bee2ef1b397efb9627e819576c42b..3acc43c05117a0e3b1f235d2caa6995ad86d9f6e 100644 (file)
@@ -16,8 +16,7 @@ struct tcm_loop_cmd {
        /* The TCM I/O descriptor that is accessed via container_of() */
        struct se_cmd tl_se_cmd;
        struct work_struct work;
-       atomic_t tmr_complete;
-       wait_queue_head_t tl_tmr_wait;
+       struct completion tmr_done;
        /* Sense buffer that will be mapped into outgoing status */
        unsigned char tl_sense_buf[TRANSPORT_SENSE_BUFFER];
 };