iscsi/iser-target: Use list_del_init for ->i_conn_node
There are a handful of uses of list_empty() for cmd->i_conn_node within iser-target code that expect to return false once a cmd has been removed from the per connect list. This patch changes all uses of list_del -> list_del_init in order to ensure that list_empty() returns false as expected. Acked-by: Sagi Grimberg <sagig@mellanox.com> Cc: Or Gerlitz <ogerlitz@mellanox.com> Cc: <stable@vger.kernel.org> #3.10+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
a2a99cea5e
commit
5159d763f6
3 changed files with 14 additions and 14 deletions
|
@ -1464,7 +1464,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd)
|
||||||
case ISCSI_OP_SCSI_CMD:
|
case ISCSI_OP_SCSI_CMD:
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
if (!list_empty(&cmd->i_conn_node))
|
if (!list_empty(&cmd->i_conn_node))
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
if (cmd->data_direction == DMA_TO_DEVICE)
|
if (cmd->data_direction == DMA_TO_DEVICE)
|
||||||
|
@ -1476,7 +1476,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd)
|
||||||
case ISCSI_OP_SCSI_TMFUNC:
|
case ISCSI_OP_SCSI_TMFUNC:
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
if (!list_empty(&cmd->i_conn_node))
|
if (!list_empty(&cmd->i_conn_node))
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
transport_generic_free_cmd(&cmd->se_cmd, 0);
|
transport_generic_free_cmd(&cmd->se_cmd, 0);
|
||||||
|
@ -1486,7 +1486,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd)
|
||||||
case ISCSI_OP_TEXT:
|
case ISCSI_OP_TEXT:
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
if (!list_empty(&cmd->i_conn_node))
|
if (!list_empty(&cmd->i_conn_node))
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -785,7 +785,7 @@ static void iscsit_ack_from_expstatsn(struct iscsi_conn *conn, u32 exp_statsn)
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
list_for_each_entry_safe(cmd, cmd_p, &ack_list, i_conn_node) {
|
list_for_each_entry_safe(cmd, cmd_p, &ack_list, i_conn_node) {
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
iscsit_free_cmd(cmd, false);
|
iscsit_free_cmd(cmd, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3708,7 +3708,7 @@ iscsit_immediate_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state
|
||||||
break;
|
break;
|
||||||
case ISTATE_REMOVE:
|
case ISTATE_REMOVE:
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
iscsit_free_cmd(cmd, false);
|
iscsit_free_cmd(cmd, false);
|
||||||
|
@ -4151,7 +4151,7 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
list_for_each_entry_safe(cmd, cmd_tmp, &conn->conn_cmd_list, i_conn_node) {
|
list_for_each_entry_safe(cmd, cmd_tmp, &conn->conn_cmd_list, i_conn_node) {
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
iscsit_increment_maxcmdsn(cmd, sess);
|
iscsit_increment_maxcmdsn(cmd, sess);
|
||||||
|
|
|
@ -138,7 +138,7 @@ void iscsit_free_connection_recovery_entires(struct iscsi_session *sess)
|
||||||
list_for_each_entry_safe(cmd, cmd_tmp,
|
list_for_each_entry_safe(cmd, cmd_tmp,
|
||||||
&cr->conn_recovery_cmd_list, i_conn_node) {
|
&cr->conn_recovery_cmd_list, i_conn_node) {
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
cmd->conn = NULL;
|
cmd->conn = NULL;
|
||||||
spin_unlock(&cr->conn_recovery_cmd_lock);
|
spin_unlock(&cr->conn_recovery_cmd_lock);
|
||||||
iscsit_free_cmd(cmd, true);
|
iscsit_free_cmd(cmd, true);
|
||||||
|
@ -160,7 +160,7 @@ void iscsit_free_connection_recovery_entires(struct iscsi_session *sess)
|
||||||
list_for_each_entry_safe(cmd, cmd_tmp,
|
list_for_each_entry_safe(cmd, cmd_tmp,
|
||||||
&cr->conn_recovery_cmd_list, i_conn_node) {
|
&cr->conn_recovery_cmd_list, i_conn_node) {
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
cmd->conn = NULL;
|
cmd->conn = NULL;
|
||||||
spin_unlock(&cr->conn_recovery_cmd_lock);
|
spin_unlock(&cr->conn_recovery_cmd_lock);
|
||||||
iscsit_free_cmd(cmd, true);
|
iscsit_free_cmd(cmd, true);
|
||||||
|
@ -216,7 +216,7 @@ int iscsit_remove_cmd_from_connection_recovery(
|
||||||
}
|
}
|
||||||
cr = cmd->cr;
|
cr = cmd->cr;
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
return --cr->cmd_count;
|
return --cr->cmd_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ int iscsit_discard_unacknowledged_ooo_cmdsns_for_conn(struct iscsi_conn *conn)
|
||||||
if (!(cmd->cmd_flags & ICF_OOO_CMDSN))
|
if (!(cmd->cmd_flags & ICF_OOO_CMDSN))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
|
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
iscsit_free_cmd(cmd, true);
|
iscsit_free_cmd(cmd, true);
|
||||||
|
@ -335,7 +335,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
|
||||||
/*
|
/*
|
||||||
* Only perform connection recovery on ISCSI_OP_SCSI_CMD or
|
* Only perform connection recovery on ISCSI_OP_SCSI_CMD or
|
||||||
* ISCSI_OP_NOOP_OUT opcodes. For all other opcodes call
|
* ISCSI_OP_NOOP_OUT opcodes. For all other opcodes call
|
||||||
* list_del(&cmd->i_conn_node); to release the command to the
|
* list_del_init(&cmd->i_conn_node); to release the command to the
|
||||||
* session pool and remove it from the connection's list.
|
* session pool and remove it from the connection's list.
|
||||||
*
|
*
|
||||||
* Also stop the DataOUT timer, which will be restarted after
|
* Also stop the DataOUT timer, which will be restarted after
|
||||||
|
@ -351,7 +351,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
|
||||||
" CID: %hu\n", cmd->iscsi_opcode,
|
" CID: %hu\n", cmd->iscsi_opcode,
|
||||||
cmd->init_task_tag, cmd->cmd_sn, conn->cid);
|
cmd->init_task_tag, cmd->cmd_sn, conn->cid);
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
iscsit_free_cmd(cmd, true);
|
iscsit_free_cmd(cmd, true);
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
|
@ -371,7 +371,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
|
||||||
*/
|
*/
|
||||||
if (!(cmd->cmd_flags & ICF_OOO_CMDSN) && !cmd->immediate_cmd &&
|
if (!(cmd->cmd_flags & ICF_OOO_CMDSN) && !cmd->immediate_cmd &&
|
||||||
iscsi_sna_gte(cmd->cmd_sn, conn->sess->exp_cmd_sn)) {
|
iscsi_sna_gte(cmd->cmd_sn, conn->sess->exp_cmd_sn)) {
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
iscsit_free_cmd(cmd, true);
|
iscsit_free_cmd(cmd, true);
|
||||||
spin_lock_bh(&conn->cmd_lock);
|
spin_lock_bh(&conn->cmd_lock);
|
||||||
|
@ -393,7 +393,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
|
||||||
|
|
||||||
cmd->sess = conn->sess;
|
cmd->sess = conn->sess;
|
||||||
|
|
||||||
list_del(&cmd->i_conn_node);
|
list_del_init(&cmd->i_conn_node);
|
||||||
spin_unlock_bh(&conn->cmd_lock);
|
spin_unlock_bh(&conn->cmd_lock);
|
||||||
|
|
||||||
iscsit_free_all_datain_reqs(cmd);
|
iscsit_free_all_datain_reqs(cmd);
|
||||||
|
|
Loading…
Reference in a new issue