Whamcloud - gitweb
LU-4772 mgs: check MGS refcounting before export barrier 20/13920/5
authorMikhail Pershin <mike.pershin@intel.com>
Sun, 1 Mar 2015 17:19:56 +0000 (20:19 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 8 Apr 2015 02:04:23 +0000 (02:04 +0000)
Patch adds debug code to make sure that there are no extra
MGS export references taken before export barrier.

Signed-off-by: Mikhail Pershin <mike.pershin@intel.com>
Change-Id: I4a7ae3130cb70a9b6847c9d4b5c2874ccf9ee72d
Reviewed-on: http://review.whamcloud.com/13920
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/mgs/mgs_handler.c

index 05c2aa5..2e71fef 100644 (file)
@@ -1365,6 +1365,22 @@ static struct lu_device *mgs_device_alloc(const struct lu_env *env,
        return ludev;
 }
 
        return ludev;
 }
 
+/* LU-4772 debug function.
+ * It checks there are no FSC keep export reference before
+ * obd_exports_barrier() call.
+ */
+int mgs_fsc_debug(struct mgs_device *mgs)
+{
+       struct fs_db *fsdb;
+
+       mutex_lock(&mgs->mgs_mutex);
+       list_for_each_entry(fsdb, &mgs->mgs_fs_db_list, fsdb_list)
+               LASSERTF(list_empty(&fsdb->fsdb_clients),
+                        "Find FSC after cleanup, FSDB %s\n", fsdb->fsdb_name);
+       mutex_unlock(&mgs->mgs_mutex);
+       return 0;
+}
+
 static struct lu_device *mgs_device_fini(const struct lu_env *env,
                                         struct lu_device *d)
 {
 static struct lu_device *mgs_device_fini(const struct lu_env *env,
                                         struct lu_device *d)
 {
@@ -1384,6 +1400,8 @@ static struct lu_device *mgs_device_fini(const struct lu_env *env,
        ptlrpc_unregister_service(mgs->mgs_service);
        mutex_unlock(&mgs->mgs_health_mutex);
 
        ptlrpc_unregister_service(mgs->mgs_service);
        mutex_unlock(&mgs->mgs_health_mutex);
 
+       mgs_fsc_debug(mgs);
+
        obd_exports_barrier(obd);
        obd_zombie_barrier();
 
        obd_exports_barrier(obd);
        obd_zombie_barrier();