Message ID | 20210416020440.259271-5-michael.christie@oracle.com |
---|---|
State | Superseded |
Headers | show |
Series | libicsi and qedi TMF fixes | expand |
On 4/15/21 7:04 PM, Mike Christie wrote: > libiscsi will now suspend the send/tx queue for the drivers so we can drop > it from the drivers ep_disconnect. > > Signed-off-by: Mike Christie <michael.christie@oracle.com> > --- > drivers/scsi/be2iscsi/be_iscsi.c | 6 ------ > drivers/scsi/bnx2i/bnx2i_iscsi.c | 6 +----- > drivers/scsi/cxgbi/libcxgbi.c | 1 - > drivers/scsi/qedi/qedi_iscsi.c | 8 ++++---- > 4 files changed, 5 insertions(+), 16 deletions(-) > > diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c > index a13c203ef7a9..a03d0ebc2312 100644 > --- a/drivers/scsi/be2iscsi/be_iscsi.c > +++ b/drivers/scsi/be2iscsi/be_iscsi.c > @@ -1293,7 +1293,6 @@ static int beiscsi_conn_close(struct beiscsi_endpoint *beiscsi_ep) > void beiscsi_ep_disconnect(struct iscsi_endpoint *ep) > { > struct beiscsi_endpoint *beiscsi_ep; > - struct beiscsi_conn *beiscsi_conn; > struct beiscsi_hba *phba; > uint16_t cri_index; > > @@ -1312,11 +1311,6 @@ void beiscsi_ep_disconnect(struct iscsi_endpoint *ep) > return; > } > > - if (beiscsi_ep->conn) { > - beiscsi_conn = beiscsi_ep->conn; > - iscsi_suspend_queue(beiscsi_conn->conn); > - } > - > if (!beiscsi_hba_is_online(phba)) { > beiscsi_log(phba, KERN_INFO, BEISCSI_LOG_CONFIG, > "BS_%d : HBA in error 0x%lx\n", phba->state); > diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c > index b6c1da46d582..9a4f4776a78a 100644 > --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c > +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c > @@ -2113,7 +2113,6 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep) > { > struct bnx2i_endpoint *bnx2i_ep; > struct bnx2i_conn *bnx2i_conn = NULL; > - struct iscsi_conn *conn = NULL; > struct bnx2i_hba *hba; > > bnx2i_ep = ep->dd_data; > @@ -2126,11 +2125,8 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep) > !time_after(jiffies, bnx2i_ep->timestamp + (12 * HZ))) > msleep(250); > > - if (bnx2i_ep->conn) { > + if (bnx2i_ep->conn) > bnx2i_conn = bnx2i_ep->conn; > - conn = bnx2i_conn->cls_conn->dd_data; > - iscsi_suspend_queue(conn); > - } > hba = bnx2i_ep->hba; > > mutex_lock(&hba->net_dev_lock); > diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c > index f078b3c4e083..215dd0eb3f48 100644 > --- a/drivers/scsi/cxgbi/libcxgbi.c > +++ b/drivers/scsi/cxgbi/libcxgbi.c > @@ -2968,7 +2968,6 @@ void cxgbi_ep_disconnect(struct iscsi_endpoint *ep) > ep, cep, cconn, csk, csk->state, csk->flags); > > if (cconn && cconn->iconn) { > - iscsi_suspend_tx(cconn->iconn); > write_lock_bh(&csk->callback_lock); > cep->csk->user_data = NULL; > cconn->cep = NULL; > diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c > index ef16537c523c..30dc345b011c 100644 > --- a/drivers/scsi/qedi/qedi_iscsi.c > +++ b/drivers/scsi/qedi/qedi_iscsi.c > @@ -988,7 +988,6 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep) > { > struct qedi_endpoint *qedi_ep; > struct qedi_conn *qedi_conn = NULL; > - struct iscsi_conn *conn = NULL; > struct qedi_ctx *qedi; > int ret = 0; > int wait_delay; > @@ -1007,8 +1006,6 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep) > > if (qedi_ep->conn) { > qedi_conn = qedi_ep->conn; > - conn = qedi_conn->cls_conn->dd_data; > - iscsi_suspend_queue(conn); > abrt_conn = qedi_conn->abrt_conn; > > while (count--) { > @@ -1621,8 +1618,11 @@ void qedi_clear_session_ctx(struct iscsi_cls_session *cls_sess) > struct iscsi_conn *conn = session->leadconn; > struct qedi_conn *qedi_conn = conn->dd_data; > > - if (iscsi_is_session_online(cls_sess)) > + if (iscsi_is_session_online(cls_sess)) { > + if (conn) > + iscsi_suspend_queue(conn); > qedi_ep_disconnect(qedi_conn->iscsi_ep); > + } > > qedi_conn_destroy(qedi_conn->cls_conn); > > Reviewed-by: Lee Duncan <lduncan@suse.com>
diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index a13c203ef7a9..a03d0ebc2312 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c @@ -1293,7 +1293,6 @@ static int beiscsi_conn_close(struct beiscsi_endpoint *beiscsi_ep) void beiscsi_ep_disconnect(struct iscsi_endpoint *ep) { struct beiscsi_endpoint *beiscsi_ep; - struct beiscsi_conn *beiscsi_conn; struct beiscsi_hba *phba; uint16_t cri_index; @@ -1312,11 +1311,6 @@ void beiscsi_ep_disconnect(struct iscsi_endpoint *ep) return; } - if (beiscsi_ep->conn) { - beiscsi_conn = beiscsi_ep->conn; - iscsi_suspend_queue(beiscsi_conn->conn); - } - if (!beiscsi_hba_is_online(phba)) { beiscsi_log(phba, KERN_INFO, BEISCSI_LOG_CONFIG, "BS_%d : HBA in error 0x%lx\n", phba->state); diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index b6c1da46d582..9a4f4776a78a 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c @@ -2113,7 +2113,6 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep) { struct bnx2i_endpoint *bnx2i_ep; struct bnx2i_conn *bnx2i_conn = NULL; - struct iscsi_conn *conn = NULL; struct bnx2i_hba *hba; bnx2i_ep = ep->dd_data; @@ -2126,11 +2125,8 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep) !time_after(jiffies, bnx2i_ep->timestamp + (12 * HZ))) msleep(250); - if (bnx2i_ep->conn) { + if (bnx2i_ep->conn) bnx2i_conn = bnx2i_ep->conn; - conn = bnx2i_conn->cls_conn->dd_data; - iscsi_suspend_queue(conn); - } hba = bnx2i_ep->hba; mutex_lock(&hba->net_dev_lock); diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index f078b3c4e083..215dd0eb3f48 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c @@ -2968,7 +2968,6 @@ void cxgbi_ep_disconnect(struct iscsi_endpoint *ep) ep, cep, cconn, csk, csk->state, csk->flags); if (cconn && cconn->iconn) { - iscsi_suspend_tx(cconn->iconn); write_lock_bh(&csk->callback_lock); cep->csk->user_data = NULL; cconn->cep = NULL; diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c index ef16537c523c..30dc345b011c 100644 --- a/drivers/scsi/qedi/qedi_iscsi.c +++ b/drivers/scsi/qedi/qedi_iscsi.c @@ -988,7 +988,6 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep) { struct qedi_endpoint *qedi_ep; struct qedi_conn *qedi_conn = NULL; - struct iscsi_conn *conn = NULL; struct qedi_ctx *qedi; int ret = 0; int wait_delay; @@ -1007,8 +1006,6 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep) if (qedi_ep->conn) { qedi_conn = qedi_ep->conn; - conn = qedi_conn->cls_conn->dd_data; - iscsi_suspend_queue(conn); abrt_conn = qedi_conn->abrt_conn; while (count--) { @@ -1621,8 +1618,11 @@ void qedi_clear_session_ctx(struct iscsi_cls_session *cls_sess) struct iscsi_conn *conn = session->leadconn; struct qedi_conn *qedi_conn = conn->dd_data; - if (iscsi_is_session_online(cls_sess)) + if (iscsi_is_session_online(cls_sess)) { + if (conn) + iscsi_suspend_queue(conn); qedi_ep_disconnect(qedi_conn->iscsi_ep); + } qedi_conn_destroy(qedi_conn->cls_conn);
libiscsi will now suspend the send/tx queue for the drivers so we can drop it from the drivers ep_disconnect. Signed-off-by: Mike Christie <michael.christie@oracle.com> --- drivers/scsi/be2iscsi/be_iscsi.c | 6 ------ drivers/scsi/bnx2i/bnx2i_iscsi.c | 6 +----- drivers/scsi/cxgbi/libcxgbi.c | 1 - drivers/scsi/qedi/qedi_iscsi.c | 8 ++++---- 4 files changed, 5 insertions(+), 16 deletions(-)