diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 91288bab20e42c0d793f325e297b1192dc2eaae0..fff902eeddd32ae903fc936a3023202595eece91 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -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 @@ -98,6 +91,22 @@ Details : Apply the MGS_CONNECT_SUPPORTED mask at reconnect time so * Output of lfs quota has been made less detailed by default, 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 diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c index 941185bc68d962752efad092951216d7ef501741..b763e3db15614ba4139a9b7b506848d74c593372 100644 --- a/lustre/mds/handler.c +++ b/lustre/mds/handler.c @@ -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)) { diff --git a/lustre/mds/mds_fs.c b/lustre/mds/mds_fs.c index cb9c31ab552007dd7c02d6696d5fb7d7611dcbe7..e59eb197d5aa35551948a6700bcbfd45931c22d6 100644 --- a/lustre/mds/mds_fs.c +++ b/lustre/mds/mds_fs.c @@ -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; diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index 23e4f1b4104daa065d248bf11a9df5f90b9b1050..2f07b7001d043908c29a0f9d92fdd88150150507 100644 --- a/lustre/mgs/mgs_fs.c +++ b/lustre/mgs/mgs_fs.c @@ -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 */ diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index 21fee82d54e7538425f8aea91b130358f06e0fd6..62d333e46a6e4c0f8903ed185f874d69570f469c 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -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)) { diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index 958bee64fe38f1af957ae63f4789add62f2a462e..681e3d1f02e45bbd589b83ef7448fef30e8ce0e8 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -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);