[ofw] RE: Patch for PR 1029 (BSOD when ib_srpt unloaded)

Fab Tillier ftillier at windows.microsoft.com
Wed May 28 08:31:10 PDT 2008


So you don't need to call DREP?  Or is there a call somewhere that isn't reflected in the patch?

-Fab

From: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Eleanor Witiak
Sent: Wednesday, May 28, 2008 7:01 AM
To: ofw at lists.openfabrics.org; Leonid Keller
Subject: [ofw] Patch for PR 1029 (BSOD when ib_srpt unloaded)

Details of the PR is found in: https://bugs.openfabrics.org/show_bug.cgi?id=1029

Leonid:  Please review and if everyone is okay with it, please commit to svn.  Thanks!

The patch is as follows:

Index: srp_connection.c
===================================================================
--- srp_connection.c       (revision 1198)
+++ srp_connection.c    (working copy)
@@ -288,24 +288,25 @@
 {
            srp_session_t   *p_srp_session = (srp_session_t* __ptr64)p_cm_dreq_rec->qp_context;
            srp_hba_t       *p_hba = p_srp_session->p_hba;
-           ib_cm_drep_t    cm_drep;
-           ib_api_status_t status;

            SRP_ENTER( SRP_DBG_PNP );
-
+
            cl_obj_lock( &p_srp_session->obj );
-           p_srp_session->connection.state = SRP_CONNECT_FAILURE;
-           cl_obj_unlock( &p_srp_session->obj );
-
-           cm_drep.p_drep_pdata = NULL;
-           cm_drep.drep_length = 0;
-
-           status = p_hba->ifc.cm_drep( p_cm_dreq_rec->h_cm_dreq, &cm_drep );
-           if ( status != IB_SUCCESS )
+          if (p_srp_session->connection.state == SRP_CONNECTED)
            {
-                       SRP_PRINT( TRACE_LEVEL_ERROR, SRP_DBG_ERROR,
-                                   ("Cannot respond to target disconnect request. Status = %d\n", status) );
+                      SRP_PRINT( TRACE_LEVEL_VERBOSE, SRP_DBG_PNP,
+                                  ("**** SRP_CONNECTED => SRP_CONNECT_FAILURE. \n") );
+                      p_srp_session->connection.state = SRP_CONNECT_FAILURE;
+                      cl_obj_unlock( &p_srp_session->obj );
            }
+          else  // since the connection is no longer there, just exit
+          {
+                      cl_obj_unlock( &p_srp_session->obj );
+                      SRP_PRINT( TRACE_LEVEL_VERBOSE, SRP_DBG_PNP,
+                                  ("**** NOT SRP_CONNECTED *****. connection state = %d\n", p_srp_session->connection.state) );
+                      SRP_EXIT( SRP_DBG_PNP );
+                      return;
+          }

            SRP_PRINT( TRACE_LEVEL_WARNING, SRP_DBG_PNP,
                        ("Target has issued a disconnect request for Session %d ref_cnt = %d.\n",
Index: srp_session.c
===================================================================
--- srp_session.c            (revision 1198)
+++ srp_session.c         (working copy)
@@ -57,8 +57,15 @@
            SRP_ENTER( SRP_DBG_SESSION );

            p_srp_session = PARENT_STRUCT( p_obj, srp_session_t, obj );
-
+
+          cl_obj_lock( &p_srp_session->obj );
+          if( p_srp_session->connection.state != SRP_CONNECT_FAILURE )
+          {
+                      cl_obj_unlock( &p_srp_session->obj );
+                      return;
+          }
            p_srp_session->connection.state = SRP_CONNECTION_CLOSING;
+          cl_obj_unlock( &p_srp_session->obj );

            SRP_PRINT( TRACE_LEVEL_VERBOSE, SRP_DBG_DEBUG,
                        ("Session Object ref_cnt = %d\n", p_srp_session->obj.ref_cnt) );

________________________
Eleanor Witiak
QLogic Corporation
Host Software Group
780 Fifth Avenue, Suite 140
King of Prussia, PA 19406
Direct:      610-233-4831
Fax:         610-233-4777
eleanor.witiak at qlogic.com<mailto:eleanor.witiak at qlogic.com>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20080528/23f2b977/attachment.html>


More information about the ofw mailing list