Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / obdclass / lu_object.c
index 387f0f2..4dfe139 100644 (file)
@@ -121,6 +121,7 @@ static struct lu_object *lu_object_alloc(const struct lu_env *env,
         struct list_head *layers;
         int clean;
         int result;
+        ENTRY;
 
         /*
          * Create top-level object slice. This will also create
@@ -128,8 +129,8 @@ static struct lu_object *lu_object_alloc(const struct lu_env *env,
          */
         top = s->ls_top_dev->ld_ops->ldo_object_alloc(env,
                                                       NULL, s->ls_top_dev);
-        if (IS_ERR(top))
-                RETURN(top);
+        if (top == NULL)
+                RETURN(ERR_PTR(-ENOMEM));
         /*
          * This is the only place where object fid is assigned. It's constant
          * after this point.
@@ -290,6 +291,7 @@ struct lu_cdebug_data {
         struct lu_fid_pack lck_pack;
 };
 
+/* context key constructor/destructor: lu_global_key_init, lu_global_key_fini */
 LU_KEY_INIT_FINI(lu_global, struct lu_cdebug_data);
 
 /*
@@ -866,6 +868,7 @@ EXPORT_SYMBOL(lu_context_key_degister);
 void *lu_context_key_get(const struct lu_context *ctx,
                          struct lu_context_key *key)
 {
+        LASSERT(ctx->lc_state == LCS_ENTERED);
         LASSERT(0 <= key->lct_index && key->lct_index < ARRAY_SIZE(lu_keys));
         return ctx->lc_value[key->lct_index];
 }
@@ -933,6 +936,7 @@ static int keys_init(struct lu_context *ctx)
 int lu_context_init(struct lu_context *ctx, __u32 tags)
 {
         memset(ctx, 0, sizeof *ctx);
+        ctx->lc_state = LCS_INITIALIZED;
         ctx->lc_tags = tags;
         return keys_init(ctx);
 }
@@ -943,6 +947,8 @@ EXPORT_SYMBOL(lu_context_init);
  */
 void lu_context_fini(struct lu_context *ctx)
 {
+        LASSERT(ctx->lc_state == LCS_INITIALIZED || ctx->lc_state == LCS_LEFT);
+        ctx->lc_state = LCS_FINALIZED;
         keys_fini(ctx);
 }
 EXPORT_SYMBOL(lu_context_fini);
@@ -952,6 +958,8 @@ EXPORT_SYMBOL(lu_context_fini);
  */
 void lu_context_enter(struct lu_context *ctx)
 {
+        LASSERT(ctx->lc_state == LCS_INITIALIZED || ctx->lc_state == LCS_LEFT);
+        ctx->lc_state = LCS_ENTERED;
 }
 EXPORT_SYMBOL(lu_context_enter);
 
@@ -962,6 +970,8 @@ void lu_context_exit(struct lu_context *ctx)
 {
         int i;
 
+        LASSERT(ctx->lc_state == LCS_ENTERED);
+        ctx->lc_state = LCS_LEFT;
         if (ctx->lc_value != NULL) {
                 for (i = 0; i < ARRAY_SIZE(lu_keys); ++i) {
                         if (ctx->lc_value[i] != NULL) {