Whamcloud - gitweb
avoid ASSERTION(client_stat->nid_exp_ref_count == 0) failed
authorshadow <shadow>
Wed, 13 Aug 2008 09:20:48 +0000 (09:20 +0000)
committershadow <shadow>
Wed, 13 Aug 2008 09:20:48 +0000 (09:20 +0000)
Branch b1_6
b=15139
i=tappro
i=rread

lustre/ChangeLog
lustre/mds/handler.c
lustre/mds/mds_fs.c
lustre/mgs/mgs_fs.c
lustre/mgs/mgs_handler.c
lustre/obdfilter/filter.c

index 91288ba..fff902e 100644 (file)
@@ -38,13 +38,6 @@ tbd Sun Microsystems, Inc.
        * Output of lfs quota has been made less detailed by default,
          old (verbose) output can be obtained by using -v option.
 
-Severity   : normal
-Bugzilla   : 16679
-Description: more cleanup in mds_lov
-Details    : add workaround for get valid ost count for avoid warnings about 
-             drop too big messages, not init llog cat under semphore which
-             can be blocked on reconnect and break normal replay, fix access
-             to wrong pointer.
 
 Severity   : enhancement
 Bugzilla   : 16573
@@ -99,6 +92,22 @@ Details    : Apply the MGS_CONNECT_SUPPORTED mask at reconnect time so
          old (verbose) output can be obtained by using -v option.
 
 Severity   : normal
+Bugzilla   : 15139
+Frequency  : rare
+Description: avoid ASSERTION(client_stat->nid_exp_ref_count == 0) failed
+Details    : release reference to stats when client disconnected, not
+             when export destroyed for avoid races when client destroyed
+             after main ost export.
+
+Severity   : normal
+Bugzilla   : 16679
+Description: more cleanup in mds_lov
+Details    : add workaround for get valid ost count for avoid warnings about 
+             drop too big messages, not init llog cat under semphore which
+             can be blocked on reconnect and break normal replay, fix access
+             to wrong pointer.
+
+Severity   : normal
 Bugzilla   : 16006
 Description: Properly propagate oinfo flags from lov to osc for statfs
 Details    : restore missing copy oi_flags to lov requests.
index 941185b..b763e3d 100644 (file)
@@ -530,6 +530,9 @@ static int mds_disconnect(struct obd_export *exp)
         if (exp->exp_obd->obd_namespace != NULL)
                 ldlm_cancel_locks_for_export(exp);
 
+        /* release nid stat refererence */
+        lprocfs_exp_cleanup(exp);
+
         /* complete all outstanding replies */
         spin_lock(&exp->exp_lock);
         while (!list_empty(&exp->exp_outstanding_replies)) {
index cb9c31a..e59eb19 100644 (file)
@@ -236,7 +236,6 @@ int mds_client_free(struct obd_export *exp)
 
         LASSERT(mds->mds_client_bitmap != NULL);
 
-        lprocfs_exp_cleanup(exp);
 
         off = med->med_lr_off;
 
index 23e4f1b..2f07b70 100644 (file)
@@ -117,7 +117,7 @@ int mgs_client_add(struct obd_device *obd,
 /* Remove client export data from the MGS */
 int mgs_client_free(struct obd_export *exp)
 {
-        return lprocfs_exp_cleanup(exp);
+        return 0; 
 }
 
 /* Same as mds_fid2dentry */
index 21fee82..62d333e 100644 (file)
@@ -133,6 +133,8 @@ static int mgs_disconnect(struct obd_export *exp)
         rc = class_disconnect(exp);
         ldlm_cancel_locks_for_export(exp);
 
+        lprocfs_exp_cleanup(exp);
+
         /* complete all outstanding replies */
         spin_lock(&exp->exp_lock);
         while (!list_empty(&exp->exp_outstanding_replies)) {
index 958bee6..681e3d1 100644 (file)
@@ -2394,7 +2394,6 @@ static int filter_destroy_export(struct obd_export *exp)
         if (obd_uuid_equals(&exp->exp_client_uuid, &exp->exp_obd->obd_uuid))
                 RETURN(0);
 
-        lprocfs_exp_cleanup(exp);
 
         if (exp->exp_obd->obd_replayable)
                 filter_client_free(exp);
@@ -2430,6 +2429,8 @@ static int filter_disconnect(struct obd_export *exp)
         if (exp->exp_obd->obd_namespace != NULL)
                 ldlm_cancel_locks_for_export(exp);
 
+        lprocfs_exp_cleanup(exp);
+
         /* flush any remaining cancel messages out to the target */
         ctxt = llog_get_context(obd, LLOG_MDS_OST_REPL_CTXT);
         err = llog_sync(ctxt, exp);