Whamcloud - gitweb
LU-3321 clio: revert LU-2622 for removing global env list
[fs/lustre-release.git] / lustre / obdclass / cl_object.c
index a13bf5c..8f29926 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
 #include <lustre_fid.h>
 #include <libcfs/list.h>
 #include <libcfs/libcfs_hash.h> /* for cfs_hash stuff */
-/* lu_time_global_{init,fini}() */
-#include <lu_time.h>
-
 #include <cl_object.h>
 #include "cl_internal.h"
 
-static cfs_mem_cache_t *cl_env_kmem;
+static struct kmem_cache *cl_env_kmem;
 
 /** Lock class of cl_object_header::coh_page_guard */
 static struct lock_class_key cl_page_guard_class;
@@ -95,6 +92,7 @@ int cl_object_header_init(struct cl_object_header *h)
                 /* XXX hard coded GFP_* mask. */
                 INIT_RADIX_TREE(&h->coh_tree, GFP_ATOMIC);
                 CFS_INIT_LIST_HEAD(&h->coh_locks);
+               h->coh_page_bufsize = ALIGN(sizeof(struct cl_page), 8);
         }
         RETURN(result);
 }
@@ -122,7 +120,7 @@ struct cl_object *cl_object_find(const struct lu_env *env,
                                  struct cl_device *cd, const struct lu_fid *fid,
                                  const struct cl_object_conf *c)
 {
-        cfs_might_sleep();
+       might_sleep();
         return lu2cl(lu_object_find_slice(env, cl2lu_dev(cd), fid, &c->coc_lu));
 }
 EXPORT_SYMBOL(cl_object_find);
@@ -220,11 +218,11 @@ EXPORT_SYMBOL(cl_object_attr_unlock);
 int cl_object_attr_get(const struct lu_env *env, struct cl_object *obj,
                        struct cl_attr *attr)
 {
-        struct lu_object_header *top;
-        int result;
+       struct lu_object_header *top;
+       int result;
 
-        LASSERT_SPIN_LOCKED(cl_object_attr_guard(obj));
-        ENTRY;
+       LASSERT(spin_is_locked(cl_object_attr_guard(obj)));
+       ENTRY;
 
         top = obj->co_lu.lo_header;
         result = 0;
@@ -252,11 +250,11 @@ EXPORT_SYMBOL(cl_object_attr_get);
 int cl_object_attr_set(const struct lu_env *env, struct cl_object *obj,
                        const struct cl_attr *attr, unsigned v)
 {
-        struct lu_object_header *top;
-        int result;
+       struct lu_object_header *top;
+       int result;
 
-        LASSERT_SPIN_LOCKED(cl_object_attr_guard(obj));
-        ENTRY;
+       LASSERT(spin_is_locked(cl_object_attr_guard(obj)));
+       ENTRY;
 
         top = obj->co_lu.lo_header;
         result = 0;
@@ -555,18 +553,18 @@ struct cl_env {
          */
         cfs_hlist_node_t  ce_node;
 #endif
-        /**
-         * Owner for the current cl_env.
-         *
-         * If LL_TASK_CL_ENV is defined, this point to the owning cfs_current(),
-         * only for debugging purpose ;
-         * Otherwise hash is used, and this is the key for cfs_hash.
-         * Now current thread pid is stored. Note using thread pointer would
-         * lead to unbalanced hash because of its specific allocation locality
-         * and could be varied for different platforms and OSes, even different
-         * OS versions.
-         */
-        void             *ce_owner;
+       /**
+        * Owner for the current cl_env.
+        *
+        * If LL_TASK_CL_ENV is defined, this point to the owning current,
+        * only for debugging purpose ;
+        * Otherwise hash is used, and this is the key for cfs_hash.
+        * Now current thread pid is stored. Note using thread pointer would
+        * lead to unbalanced hash because of its specific allocation locality
+        * and could be varied for different platforms and OSes, even different
+        * OS versions.
+        */
+       void             *ce_owner;
 
         /*
          * Linkage into global list of all client environments. Used for
@@ -657,35 +655,35 @@ static cfs_hash_ops_t cl_env_hops = {
 
 static inline struct cl_env *cl_env_fetch(void)
 {
-        struct cl_env *cle;
+       struct cl_env *cle;
 
-        cle = cfs_hash_lookup(cl_env_hash, (void *) (long) cfs_current()->pid);
-        LASSERT(ergo(cle, cle->ce_magic == &cl_env_init0));
-        return cle;
+       cle = cfs_hash_lookup(cl_env_hash, (void *) (long) current->pid);
+       LASSERT(ergo(cle, cle->ce_magic == &cl_env_init0));
+       return cle;
 }
 
 static inline void cl_env_attach(struct cl_env *cle)
 {
-        if (cle) {
-                int rc;
+       if (cle) {
+               int rc;
 
-                LASSERT(cle->ce_owner == NULL);
-                cle->ce_owner = (void *) (long) cfs_current()->pid;
-                rc = cfs_hash_add_unique(cl_env_hash, cle->ce_owner,
-                                         &cle->ce_node);
-                LASSERT(rc == 0);
-        }
+               LASSERT(cle->ce_owner == NULL);
+               cle->ce_owner = (void *) (long) current->pid;
+               rc = cfs_hash_add_unique(cl_env_hash, cle->ce_owner,
+                                        &cle->ce_node);
+               LASSERT(rc == 0);
+       }
 }
 
 static inline void cl_env_do_detach(struct cl_env *cle)
 {
-        void *cookie;
+       void *cookie;
 
-        LASSERT(cle->ce_owner == (void *) (long) cfs_current()->pid);
-        cookie = cfs_hash_del(cl_env_hash, cle->ce_owner,
-                              &cle->ce_node);
-        LASSERT(cookie == cle);
-        cle->ce_owner = NULL;
+       LASSERT(cle->ce_owner == (void *) (long) current->pid);
+       cookie = cfs_hash_del(cl_env_hash, cle->ce_owner,
+                             &cle->ce_node);
+       LASSERT(cookie == cle);
+       cle->ce_owner = NULL;
 }
 
 static int cl_env_store_init(void) {
@@ -710,30 +708,30 @@ static void cl_env_store_fini(void) {
 
 static inline struct cl_env *cl_env_fetch(void)
 {
-        struct cl_env *cle;
+       struct cl_env *cle;
 
-        cle = cfs_current()->LL_TASK_CL_ENV;
-        if (cle && cle->ce_magic != &cl_env_init0)
-                cle = NULL;
-        return cle;
+       cle = current->LL_TASK_CL_ENV;
+       if (cle && cle->ce_magic != &cl_env_init0)
+               cle = NULL;
+       return cle;
 }
 
 static inline void cl_env_attach(struct cl_env *cle)
 {
-        if (cle) {
-                LASSERT(cle->ce_owner == NULL);
-                cle->ce_owner = cfs_current();
-                cle->ce_prev = cfs_current()->LL_TASK_CL_ENV;
-                cfs_current()->LL_TASK_CL_ENV = cle;
-        }
+       if (cle) {
+               LASSERT(cle->ce_owner == NULL);
+               cle->ce_owner = current;
+               cle->ce_prev = current->LL_TASK_CL_ENV;
+               current->LL_TASK_CL_ENV = cle;
+       }
 }
 
 static inline void cl_env_do_detach(struct cl_env *cle)
 {
-        LASSERT(cle->ce_owner == cfs_current());
-        LASSERT(cfs_current()->LL_TASK_CL_ENV == cle);
-        cfs_current()->LL_TASK_CL_ENV = cle->ce_prev;
-        cle->ce_owner = NULL;
+       LASSERT(cle->ce_owner == current);
+       LASSERT(current->LL_TASK_CL_ENV == cle);
+       current->LL_TASK_CL_ENV = cle->ce_prev;
+       cle->ce_owner = NULL;
 }
 
 static int cl_env_store_init(void) { return 0; }
@@ -757,7 +755,7 @@ static struct lu_env *cl_env_new(__u32 ctx_tags, __u32 ses_tags, void *debug)
         struct lu_env *env;
         struct cl_env *cle;
 
-        OBD_SLAB_ALLOC_PTR_GFP(cle, cl_env_kmem, CFS_ALLOC_IO);
+       OBD_SLAB_ALLOC_PTR_GFP(cle, cl_env_kmem, __GFP_IO);
         if (cle != NULL) {
                 int rc;