Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -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)
+1 −2
Original line number Diff line number Diff line
@@ -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];
};