Whamcloud - gitweb
b=15870
[fs/lustre-release.git] / lustre / mdd / mdd_device.c
index 0ad9650..f9dc257 100644 (file)
@@ -61,7 +61,9 @@ static int mdd_device_init(const struct lu_env *env, struct lu_device *d,
         mdd->mdd_txn_cb.dtc_txn_stop = mdd_txn_stop_cb;
         mdd->mdd_txn_cb.dtc_txn_commit = mdd_txn_commit_cb;
         mdd->mdd_txn_cb.dtc_cookie = mdd;
-        INIT_LIST_HEAD(&mdd->mdd_txn_cb.dtc_linkage);
+        CFS_INIT_LIST_HEAD(&mdd->mdd_txn_cb.dtc_linkage);
+        mdd->mdd_atime_diff = MAX_ATIME_DIFF;
+
         rc = mdd_procfs_init(mdd, name);
         RETURN(rc);
 }
@@ -315,38 +317,25 @@ static struct lu_device *mdd_device_alloc(const struct lu_env *env,
         return l;
 }
 
-static void mdd_device_free(const struct lu_env *env,
-                            struct lu_device *lu)
+static struct lu_device *mdd_device_free(const struct lu_env *env,
+                                         struct lu_device *lu)
 {
         struct mdd_device *m = lu2mdd_dev(lu);
+        struct lu_device  *next = &m->mdd_child->dd_lu_dev;
+        ENTRY;
 
         LASSERT(atomic_read(&lu->ld_ref) == 0);
         md_device_fini(&m->mdd_md_dev);
         OBD_FREE_PTR(m);
+        RETURN(next);
 }
 
 static struct obd_ops mdd_obd_device_ops = {
         .o_owner = THIS_MODULE
 };
 
-static void *mdd_ucred_key_init(const struct lu_context *ctx,
-                                struct lu_context_key *key)
-{
-        struct md_ucred *uc;
-
-        OBD_ALLOC_PTR(uc);
-        if (uc == NULL)
-                uc = ERR_PTR(-ENOMEM);
-        return uc;
-}
-
-static void mdd_ucred_key_fini(const struct lu_context *ctx,
-                             struct lu_context_key *key, void *data)
-{
-        struct md_ucred *uc = data;
-        if (!IS_ERR(uc))
-                OBD_FREE_PTR(uc);
-}
+/* context key constructor/destructor: mdd_ucred_key_init, mdd_ucred_key_fini */
+LU_KEY_INIT_FINI(mdd_ucred, struct md_ucred);
 
 static struct lu_context_key mdd_ucred_key = {
         .lct_tags = LCT_SESSION,
@@ -361,24 +350,11 @@ struct md_ucred *md_ucred(const struct lu_env *env)
 }
 EXPORT_SYMBOL(md_ucred);
 
-static void *mdd_capainfo_key_init(const struct lu_context *ctx,
-                                   struct lu_context_key *key)
-{
-        struct md_capainfo *ci;
-
-        OBD_ALLOC_PTR(ci);
-        if (ci == NULL)
-                ci = ERR_PTR(-ENOMEM);
-        return ci;
-}
-
-static void mdd_capainfo_key_fini(const struct lu_context *ctx,
-                                  struct lu_context_key *key, void *data)
-{
-        struct md_capainfo *ci = data;
-        if (!IS_ERR(ci))
-                OBD_FREE_PTR(ci);
-}
+/*
+ * context key constructor/destructor:
+ * mdd_capainfo_key_init, mdd_capainfo_key_fini
+ */
+LU_KEY_INIT_FINI(mdd_capainfo, struct md_capainfo);
 
 struct lu_context_key mdd_capainfo_key = {
         .lct_tags = LCT_SESSION,
@@ -395,29 +371,8 @@ struct md_capainfo *md_capainfo(const struct lu_env *env)
 }
 EXPORT_SYMBOL(md_capainfo);
 
-static int mdd_type_init(struct lu_device_type *t)
-{
-        int result;
-
-        LU_CONTEXT_KEY_INIT(&mdd_thread_key);
-        result = lu_context_key_register(&mdd_thread_key);
-        if (result == 0) {
-                LU_CONTEXT_KEY_INIT(&mdd_ucred_key);
-                result = lu_context_key_register(&mdd_ucred_key);
-        }
-        if (result == 0) {
-                LU_CONTEXT_KEY_INIT(&mdd_capainfo_key);
-                result = lu_context_key_register(&mdd_capainfo_key);
-        }
-        return result;
-}
-
-static void mdd_type_fini(struct lu_device_type *t)
-{
-        lu_context_key_degister(&mdd_capainfo_key);
-        lu_context_key_degister(&mdd_ucred_key);
-        lu_context_key_degister(&mdd_thread_key);
-}
+/* type constructor/destructor: mdd_type_init, mdd_type_fini */
+LU_TYPE_INIT_FINI(mdd, &mdd_thread_key, &mdd_ucred_key, &mdd_capainfo_key);
 
 struct md_device_operations mdd_ops = {
         .mdo_statfs         = mdd_statfs,
@@ -445,16 +400,8 @@ static struct lu_device_type mdd_device_type = {
         .ldt_ctx_tags = LCT_MD_THREAD
 };
 
-static void *mdd_key_init(const struct lu_context *ctx,
-                          struct lu_context_key *key)
-{
-        struct mdd_thread_info *info;
-
-        OBD_ALLOC_PTR(info);
-        if (info == NULL)
-                info = ERR_PTR(-ENOMEM);
-        return info;
-}
+/* context key constructor: mdd_key_init */
+LU_KEY_INIT(mdd, struct mdd_thread_info);
 
 static void mdd_key_fini(const struct lu_context *ctx,
                          struct lu_context_key *key, void *data)
@@ -467,26 +414,13 @@ static void mdd_key_fini(const struct lu_context *ctx,
         OBD_FREE_PTR(info);
 }
 
-struct lu_context_key mdd_thread_key = {
-        .lct_tags = LCT_MD_THREAD,
-        .lct_init = mdd_key_init,
-        .lct_fini = mdd_key_fini
-};
-
-struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
-        { 0 }
-};
-
-struct lprocfs_vars lprocfs_mdd_module_vars[] = {
-        { 0 }
-};
-
-LPROCFS_INIT_VARS(mdd, lprocfs_mdd_module_vars, lprocfs_mdd_obd_vars);
+/* context key: mdd_thread_key */
+LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
 
 static int __init mdd_mod_init(void)
 {
         struct lprocfs_static_vars lvars;
-        lprocfs_init_vars(mdd, &lvars);
+        lprocfs_mdd_init_vars(&lvars);
         return class_register_type(&mdd_obd_device_ops, NULL, lvars.module_vars,
                                    LUSTRE_MDD_NAME, &mdd_device_type);
 }