target: Move session check from target_put_sess_cmd() into target_release_cmd_kref()
This patch does not change any functionality. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: David Disseldorp <ddiss@suse.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
b1a2ecdad7
commit
6b6427b6fd
@ -2592,39 +2592,38 @@ static void target_release_cmd_kref(struct kref *kref)
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
bool fabric_stop;
|
bool fabric_stop;
|
||||||
|
|
||||||
spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
|
if (se_sess) {
|
||||||
|
spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
|
||||||
|
|
||||||
spin_lock(&se_cmd->t_state_lock);
|
spin_lock(&se_cmd->t_state_lock);
|
||||||
fabric_stop = (se_cmd->transport_state & CMD_T_FABRIC_STOP) &&
|
fabric_stop = (se_cmd->transport_state & CMD_T_FABRIC_STOP) &&
|
||||||
(se_cmd->transport_state & CMD_T_ABORTED);
|
(se_cmd->transport_state & CMD_T_ABORTED);
|
||||||
spin_unlock(&se_cmd->t_state_lock);
|
spin_unlock(&se_cmd->t_state_lock);
|
||||||
|
|
||||||
if (se_cmd->cmd_wait_set || fabric_stop) {
|
if (se_cmd->cmd_wait_set || fabric_stop) {
|
||||||
|
list_del_init(&se_cmd->se_cmd_list);
|
||||||
|
spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
|
||||||
|
target_free_cmd_mem(se_cmd);
|
||||||
|
complete(&se_cmd->cmd_wait_comp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
list_del_init(&se_cmd->se_cmd_list);
|
list_del_init(&se_cmd->se_cmd_list);
|
||||||
spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
|
spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
|
||||||
target_free_cmd_mem(se_cmd);
|
|
||||||
complete(&se_cmd->cmd_wait_comp);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
list_del_init(&se_cmd->se_cmd_list);
|
|
||||||
spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
|
|
||||||
|
|
||||||
target_free_cmd_mem(se_cmd);
|
target_free_cmd_mem(se_cmd);
|
||||||
se_cmd->se_tfo->release_cmd(se_cmd);
|
se_cmd->se_tfo->release_cmd(se_cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* target_put_sess_cmd - Check for active I/O shutdown via kref_put
|
/**
|
||||||
* @se_cmd: command descriptor to drop
|
* target_put_sess_cmd - decrease the command reference count
|
||||||
|
* @se_cmd: command to drop a reference from
|
||||||
|
*
|
||||||
|
* Returns 1 if and only if this target_put_sess_cmd() call caused the
|
||||||
|
* refcount to drop to zero. Returns zero otherwise.
|
||||||
*/
|
*/
|
||||||
int target_put_sess_cmd(struct se_cmd *se_cmd)
|
int target_put_sess_cmd(struct se_cmd *se_cmd)
|
||||||
{
|
{
|
||||||
struct se_session *se_sess = se_cmd->se_sess;
|
|
||||||
|
|
||||||
if (!se_sess) {
|
|
||||||
target_free_cmd_mem(se_cmd);
|
|
||||||
se_cmd->se_tfo->release_cmd(se_cmd);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return kref_put(&se_cmd->cmd_kref, target_release_cmd_kref);
|
return kref_put(&se_cmd->cmd_kref, target_release_cmd_kref);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(target_put_sess_cmd);
|
EXPORT_SYMBOL(target_put_sess_cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user