Re: [PATCH 08/10] scsi: iscsi: Fix nop handling during conn recovery

Chris Leech
2022-04-09T01:59:09Z

On Thu, Apr 07, 2022 at 07:13:12PM -0500, Mike Christie wrote:
> If a offload driver doesn't use the xmit workqueue, then when we are
> doing ep_disconnect libiscsi can still inject PDUs to the driver. This
> adds a check for if the connection is bound before trying to inject PDUs.
>
> Reviewed-by: Lee Duncan <lduncan@suse.com>
> Signed-off-by: Mike Christie <michael.christie@oracle.com>
> ---
> drivers/scsi/libiscsi.c | 7 ++++++-
> include/scsi/libiscsi.h | 2 +-
> 2 files changed, 7 insertions(+), 2 deletions(-)

Reviewed-by: Chris Leech <cleech@redhat.com>

> diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
> index 5e7bd5a3b430..0bf8cf8585bb 100644
> --- a/drivers/scsi/libiscsi.c
> +++ b/drivers/scsi/libiscsi.c
> @@ -678,7 +678,8 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
> struct iscsi_task *task;
> itt_t itt;
>
> - if (session->state == ISCSI_STATE_TERMINATE)
> + if (session->state == ISCSI_STATE_TERMINATE ||
> + !test_bit(ISCSI_CONN_FLAG_BOUND, &conn->flags))
> return NULL;
>
> if (opcode == ISCSI_OP_LOGIN || opcode == ISCSI_OP_TEXT) {
> @@ -2214,6 +2215,8 @@ void iscsi_conn_unbind(struct iscsi_cls_conn *cls_conn, bool is_active)
> iscsi_suspend_tx(conn);
>
> spin_lock_bh(&session->frwd_lock);
> + clear_bit(ISCSI_CONN_FLAG_BOUND, &conn->flags);
> +
> if (!is_active) {
> /*
> * if logout timed out before userspace could even send a PDU
> @@ -3318,6 +3321,8 @@ int iscsi_conn_bind(struct iscsi_cls_session *cls_session,
> spin_lock_bh(&session->frwd_lock);
> if (is_leading)
> session->leadconn = conn;
> +
> + set_bit(ISCSI_CONN_FLAG_BOUND, &conn->flags);
> spin_unlock_bh(&session->frwd_lock);
>
> /*
> diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
> index 84086c240228..d0a24779c52d 100644
> --- a/include/scsi/libiscsi.h
> +++ b/include/scsi/libiscsi.h
> @@ -56,7 +56,7 @@ enum {
> /* Connection flags */
> #define ISCSI_CONN_FLAG_SUSPEND_TX BIT(0)
> #define ISCSI_CONN_FLAG_SUSPEND_RX BIT(1)
> -
> +#define ISCSI_CONN_FLAG_BOUND BIT(2)
>
> #define ISCSI_ITT_MASK 0x1fff
> #define ISCSI_TOTAL_CMDS_MAX 4096
> --
> 2.25.1
>