Whamcloud - gitweb
LU-7888 obdclass: not hold global lock when lwp callback
[fs/lustre-release.git] / lustre / include / obd_class.h
index 8f01ef5..0b72e84 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2014, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -110,7 +110,6 @@ void obd_zombie_barrier(void);
 void obd_exports_barrier(struct obd_device *obd);
 int kuc_len(int payload_len);
 struct kuc_hdr * kuc_ptr(void *p);
-int kuc_ispayload(void *p);
 void *kuc_alloc(int payload_len, int transport, int type);
 void kuc_free(void *p, int payload_len);
 int obd_get_request_slot(struct client_obd *cli);
@@ -593,32 +592,29 @@ static inline int obd_setup(struct obd_device *obd, struct lustre_cfg *cfg)
         RETURN(rc);
 }
 
-static inline int obd_precleanup(struct obd_device *obd,
-                                 enum obd_cleanup_stage cleanup_stage)
+static inline int obd_precleanup(struct obd_device *obd)
 {
-        int rc;
-        DECLARE_LU_VARS(ldt, d);
-        ENTRY;
+       int rc;
+       DECLARE_LU_VARS(ldt, d);
+       ENTRY;
 
-        OBD_CHECK_DEV(obd);
-        ldt = obd->obd_type->typ_lu;
-        d = obd->obd_lu_dev;
-        if (ldt != NULL && d != NULL) {
-                if (cleanup_stage == OBD_CLEANUP_EXPORTS) {
-                        struct lu_env env;
-
-                        rc = lu_env_init(&env, ldt->ldt_ctx_tags);
-                        if (rc == 0) {
-                                ldt->ldt_ops->ldto_device_fini(&env, d);
-                                lu_env_fini(&env);
-                        }
-                }
-        }
-        OBD_CHECK_DT_OP(obd, precleanup, 0);
-        OBD_COUNTER_INCREMENT(obd, precleanup);
+       OBD_CHECK_DEV(obd);
+       ldt = obd->obd_type->typ_lu;
+       d = obd->obd_lu_dev;
+       if (ldt != NULL && d != NULL) {
+               struct lu_env env;
 
-        rc = OBP(obd, precleanup)(obd, cleanup_stage);
-        RETURN(rc);
+               rc = lu_env_init(&env, ldt->ldt_ctx_tags);
+               if (rc == 0) {
+                       ldt->ldt_ops->ldto_device_fini(&env, d);
+                       lu_env_fini(&env);
+               }
+       }
+       OBD_CHECK_DT_OP(obd, precleanup, 0);
+       OBD_COUNTER_INCREMENT(obd, precleanup);
+
+       rc = OBP(obd, precleanup)(obd);
+       RETURN(rc);
 }
 
 static inline int obd_cleanup(struct obd_device *obd)
@@ -1270,14 +1266,15 @@ static inline int obd_register_observer(struct obd_device *obd,
 }
 
 /* metadata helpers */
-static inline int md_getstatus(struct obd_export *exp, struct lu_fid *fid)
+static inline int md_get_root(struct obd_export *exp, const char *fileset,
+                             struct lu_fid *fid)
 {
        int rc;
 
        ENTRY;
-       EXP_CHECK_MD_OP(exp, getstatus);
-       EXP_MD_COUNTER_INCREMENT(exp, getstatus);
-       rc = MDP(exp->exp_obd, getstatus)(exp, fid);
+       EXP_CHECK_MD_OP(exp, get_root);
+       EXP_MD_COUNTER_INCREMENT(exp, get_root);
+       rc = MDP(exp->exp_obd, get_root)(exp, fileset, fid);
 
        RETURN(rc);
 }
@@ -1304,18 +1301,6 @@ static inline int md_null_inode(struct obd_export *exp,
         RETURN(rc);
 }
 
-static inline int md_find_cbdata(struct obd_export *exp,
-                                 const struct lu_fid *fid,
-                                 ldlm_iterator_t it, void *data)
-{
-        int rc;
-        ENTRY;
-        EXP_CHECK_MD_OP(exp, find_cbdata);
-        EXP_MD_COUNTER_INCREMENT(exp, find_cbdata);
-        rc = MDP(exp->exp_obd, find_cbdata)(exp, fid, it, data);
-        RETURN(rc);
-}
-
 static inline int md_close(struct obd_export *exp, struct md_op_data *op_data,
                            struct md_open_data *mod,
                            struct ptlrpc_request **request)
@@ -1680,7 +1665,8 @@ struct lwp_register_item {
        struct obd_export **lri_exp;
        register_lwp_cb     lri_cb_func;
        void               *lri_cb_data;
-       struct list_head            lri_list;
+       struct list_head    lri_list;
+       atomic_t            lri_ref;
        char                lri_name[MTI_NAME_MAXLEN];
 };
 
@@ -1719,6 +1705,9 @@ int class_check_uuid(struct obd_uuid *uuid, __u64 nid);
 void class_init_uuidlist(void);
 void class_exit_uuidlist(void);
 
+/* class_obd.c */
+extern char obd_jobid_node[];
+
 /* prng.c */
 #define ll_generate_random_uuid(uuid_out) cfs_get_random_bytes(uuid_out, sizeof(class_uuid_t))