Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / obdclass / cl_object.c
index 84d14af..8e013d5 100644 (file)
@@ -223,7 +223,7 @@ int cl_object_attr_get(const struct lu_env *env, struct cl_object *obj,
         struct lu_object_header *top;
         int result;
 
-        LASSERT(spin_is_locked(cl_object_attr_guard(obj)));
+        LASSERT_SPIN_LOCKED(cl_object_attr_guard(obj));
         ENTRY;
 
         top = obj->co_lu.lo_header;
@@ -255,7 +255,7 @@ int cl_object_attr_set(const struct lu_env *env, struct cl_object *obj,
         struct lu_object_header *top;
         int result;
 
-        LASSERT(spin_is_locked(cl_object_attr_guard(obj)));
+        LASSERT_SPIN_LOCKED(cl_object_attr_guard(obj));
         ENTRY;
 
         top = obj->co_lu.lo_header;
@@ -562,7 +562,7 @@ static struct lu_env *cl_env_new(__u32 tags, void *debug)
         struct lu_env *env;
         struct cl_env *cle;
 
-        OBD_SLAB_ALLOC_PTR(cle, cl_env_kmem);
+        OBD_SLAB_ALLOC_PTR_GFP(cle, cl_env_kmem, CFS_ALLOC_IO);
         if (cle != NULL) {
                 int rc;
 
@@ -879,7 +879,12 @@ struct lu_env *cl_env_nested_get(struct cl_env_nest *nest)
                 }
         }
         env = cl_env_get(&nest->cen_refcheck);
-        LASSERT(ergo(!IS_ERR(env), !cl_io_is_going(env)));
+        if (IS_ERR(env)) {
+                cl_env_reexit(nest->cen_cookie);
+                return env;
+        }
+
+        LASSERT(!cl_io_is_going(env));
         return env;
 }
 EXPORT_SYMBOL(cl_env_nested_get);
@@ -995,8 +1000,12 @@ static void *cl_key_init(const struct lu_context *ctx,
         struct cl_thread_info *info;
 
         info = cl0_key_init(ctx, key);
-        if (!IS_ERR(info))
-                lu_ref_init(&info->clt_locks_locked);
+        if (!IS_ERR(info)) {
+                int i;
+
+                for (i = 0; i < ARRAY_SIZE(info->clt_counters); ++i)
+                        lu_ref_init(&info->clt_counters[i].ctc_locks_locked);
+        }
         return info;
 }
 
@@ -1004,9 +1013,11 @@ static void cl_key_fini(const struct lu_context *ctx,
                         struct lu_context_key *key, void *data)
 {
         struct cl_thread_info *info;
+        int i;
 
         info = data;
-        lu_ref_fini(&info->clt_locks_locked);
+        for (i = 0; i < ARRAY_SIZE(info->clt_counters); ++i)
+                lu_ref_fini(&info->clt_counters[i].ctc_locks_locked);
         cl0_key_fini(ctx, key, data);
 }
 
@@ -1014,14 +1025,16 @@ static void cl_key_exit(const struct lu_context *ctx,
                         struct lu_context_key *key, void *data)
 {
         struct cl_thread_info *info = data;
+        int i;
 
-        LASSERT(info->clt_nr_locks_locked == 0);
-        LASSERT(info->clt_nr_held == 0);
-        LASSERT(info->clt_nr_used == 0);
-        LASSERT(info->clt_nr_locks_acquired == 0);
-
-        lu_ref_fini(&info->clt_locks_locked);
-        lu_ref_init(&info->clt_locks_locked);
+        for (i = 0; i < ARRAY_SIZE(info->clt_counters); ++i) {
+                LASSERT(info->clt_counters[i].ctc_nr_held == 0);
+                LASSERT(info->clt_counters[i].ctc_nr_used == 0);
+                LASSERT(info->clt_counters[i].ctc_nr_locks_acquired == 0);
+                LASSERT(info->clt_counters[i].ctc_nr_locks_locked == 0);
+                lu_ref_fini(&info->clt_counters[i].ctc_locks_locked);
+                lu_ref_init(&info->clt_counters[i].ctc_locks_locked);
+        }
 }
 
 static struct lu_context_key cl_key = {