]> git.baikalelectronics.ru Git - kernel.git/commit
scsi: iscsi: Fix unbound endpoint error handling
authorMike Christie <michael.christie@oracle.com>
Fri, 8 Apr 2022 00:13:10 +0000 (19:13 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 12 Apr 2022 02:09:35 +0000 (22:09 -0400)
commit4aa800b8d9b25f410d06bff8ae359f68ed8c61fa
treed0778b3ed572a396bd8c5feeb15c1550ec641d0f
parent3857861790f5a47c1640e0ee058f79f7ba797aa2
scsi: iscsi: Fix unbound endpoint error handling

If a driver raises a connection error before the connection is bound, we
can leave a cleanup_work queued that can later run and disconnect/stop a
connection that is logged in. The problem is that drivers can call
iscsi_conn_error_event for endpoints that are connected but not yet bound
when something like the network port they are using is brought down.
iscsi_cleanup_conn_work_fn will check for this and exit early, but if the
cleanup_work is stuck behind other works, it might not get run until after
userspace has done ep_disconnect. Because the endpoint is not yet bound
there was no way for ep_disconnect to flush the work.

The bug of leaving stop_conns queued was added in:

Commit 69e764b06e44 ("scsi: iscsi: Fix in-kernel conn failure handling")

and:

Commit 64ea29d05ced ("scsi: iscsi: Perform connection failure entirely in
kernel space")

was supposed to fix it, but left this case.

This patch moves the conn state check to before we even queue the work so
we can avoid queueing.

Link: https://lore.kernel.org/r/20220408001314.5014-7-michael.christie@oracle.com
Fixes: 64ea29d05ced ("scsi: iscsi: Perform connection failure entirely in kernel space")
Tested-by: Manish Rangankar <mrangankar@marvell.com>
Reviewed-by: Lee Duncan <lduncan@@suse.com>
Reviewed-by: Chris Leech <cleech@redhat.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_transport_iscsi.c