Skip to content

Commit ea87981

Browse files
logostmartinkpetersen
authored andcommitted
scsi: target: iscsi: Handle abort for WRITE_PENDING cmds
Sometimes an initiator does not send data for a WRITE command and tries to abort it. The abort hangs waiting for frontend driver completion. iSCSI driver waits for data and that timeout eventually initiates connection reinstatment. The connection closing releases the commands in the connection, but those aborted commands still did not handle the abort and did not decrease a command ref counter. Because of that the connection reinstatement hangs indefinitely and prevents re-login for that initiator. Add handling in TCM of the abort for the WRITE_PENDING commands at connection closing moment to make it possible to release them. Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com> [mnc: Rebase and expand comment] Signed-off-by: Mike Christie <michael.christie@oracle.com> Link: https://lore.kernel.org/r/20230319015620.96006-10-michael.christie@oracle.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent cc79da3 commit ea87981

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

drivers/target/iscsi/iscsi_target.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <target/target_core_base.h>
2727
#include <target/target_core_fabric.h>
2828

29+
#include <target/target_core_backend.h>
2930
#include <target/iscsi/iscsi_target_core.h>
3031
#include "iscsi_target_parameters.h"
3132
#include "iscsi_target_seq_pdu_list.h"
@@ -4236,6 +4237,16 @@ static void iscsit_release_commands_from_conn(struct iscsit_conn *conn)
42364237
} else {
42374238
se_cmd->transport_state |= CMD_T_FABRIC_STOP;
42384239
}
4240+
4241+
if (cmd->se_cmd.t_state == TRANSPORT_WRITE_PENDING) {
4242+
/*
4243+
* We never submitted the cmd to LIO core, so we have
4244+
* to tell LIO to perform the completion process.
4245+
*/
4246+
spin_unlock_irq(&se_cmd->t_state_lock);
4247+
target_complete_cmd(&cmd->se_cmd, SAM_STAT_TASK_ABORTED);
4248+
continue;
4249+
}
42394250
spin_unlock_irq(&se_cmd->t_state_lock);
42404251
}
42414252
spin_unlock_bh(&conn->cmd_lock);

0 commit comments

Comments
 (0)