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@xxxxxxxx> > Signed-off-by: Mike Christie <michael.christie@xxxxxxxxxx> > --- > drivers/scsi/libiscsi.c | 7 ++++++- > include/scsi/libiscsi.h | 2 +- > 2 files changed, 7 insertions(+), 2 deletions(-) Reviewed-by: Chris Leech <cleech@xxxxxxxxxx> > 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 >