Whamcloud - gitweb
LU-8019 llite: Restore proper opencache operations
[fs/lustre-release.git] / lustre / llite / vvp_dev.c
index c76e222..61b8bb9 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) 2012, 2014, Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -41,7 +41,6 @@
 
 #define DEBUG_SUBSYSTEM S_LLITE
 
-
 #include <obd.h>
 #include "llite_internal.h"
 #include "vvp_internal.h"
  * "llite_" (var. "ll_") prefix.
  */
 
+static struct kmem_cache *ll_thread_kmem;
 struct kmem_cache *vvp_lock_kmem;
 struct kmem_cache *vvp_object_kmem;
-static struct kmem_cache *vvp_thread_kmem;
 static struct kmem_cache *vvp_session_kmem;
+static struct kmem_cache *vvp_thread_kmem;
+
 static struct lu_kmem_descr vvp_caches[] = {
        {
+               .ckd_cache = &ll_thread_kmem,
+               .ckd_name  = "ll_thread_kmem",
+               .ckd_size  = sizeof(struct ll_thread_info),
+       },
+       {
                .ckd_cache = &vvp_lock_kmem,
                .ckd_name  = "vvp_lock_kmem",
                .ckd_size  = sizeof(struct vvp_lock),
@@ -73,38 +79,46 @@ static struct lu_kmem_descr vvp_caches[] = {
                .ckd_size  = sizeof(struct vvp_object),
        },
         {
-                .ckd_cache = &vvp_thread_kmem,
-                .ckd_name  = "vvp_thread_kmem",
-                .ckd_size  = sizeof (struct vvp_thread_info),
-        },
-        {
                 .ckd_cache = &vvp_session_kmem,
                 .ckd_name  = "vvp_session_kmem",
                 .ckd_size  = sizeof (struct vvp_session)
         },
+       {
+               .ckd_cache = &vvp_thread_kmem,
+               .ckd_name  = "vvp_thread_kmem",
+               .ckd_size  = sizeof(struct vvp_thread_info),
+       },
         {
                 .ckd_cache = NULL
         }
 };
 
-static void *vvp_key_init(const struct lu_context *ctx,
-                         struct lu_context_key *key)
+static void *ll_thread_key_init(const struct lu_context *ctx,
+                               struct lu_context_key *key)
 {
-       struct vvp_thread_info *info;
+       struct ll_thread_info *lti;
+
+       OBD_SLAB_ALLOC_PTR_GFP(lti, ll_thread_kmem, GFP_NOFS);
+       if (lti == NULL)
+               lti = ERR_PTR(-ENOMEM);
 
-       OBD_SLAB_ALLOC_PTR_GFP(info, vvp_thread_kmem, GFP_NOFS);
-       if (info == NULL)
-               info = ERR_PTR(-ENOMEM);
-       return info;
+       return lti;
 }
 
-static void vvp_key_fini(const struct lu_context *ctx,
-                         struct lu_context_key *key, void *data)
+static void ll_thread_key_fini(const struct lu_context *ctx,
+                              struct lu_context_key *key, void *data)
 {
-        struct vvp_thread_info *info = data;
-        OBD_SLAB_FREE_PTR(info, vvp_thread_kmem);
+       struct ll_thread_info *lti = data;
+
+       OBD_SLAB_FREE_PTR(lti, ll_thread_kmem);
 }
 
+struct lu_context_key ll_thread_key = {
+       .lct_tags = LCT_CL_THREAD,
+       .lct_init = ll_thread_key_init,
+       .lct_fini = ll_thread_key_fini,
+};
+
 static void *vvp_session_key_init(const struct lu_context *ctx,
                                  struct lu_context_key *key)
 {
@@ -123,30 +137,43 @@ static void vvp_session_key_fini(const struct lu_context *ctx,
         OBD_SLAB_FREE_PTR(session, vvp_session_kmem);
 }
 
-
-struct lu_context_key vvp_key = {
-        .lct_tags = LCT_CL_THREAD,
-        .lct_init = vvp_key_init,
-        .lct_fini = vvp_key_fini
-};
-
 struct lu_context_key vvp_session_key = {
         .lct_tags = LCT_SESSION,
         .lct_init = vvp_session_key_init,
         .lct_fini = vvp_session_key_fini
 };
 
+static void *vvp_thread_key_init(const struct lu_context *ctx,
+                                struct lu_context_key *key)
+{
+       struct vvp_thread_info *vti;
+
+       OBD_SLAB_ALLOC_PTR_GFP(vti, vvp_thread_kmem, GFP_NOFS);
+       if (vti == NULL)
+               vti = ERR_PTR(-ENOMEM);
+       return vti;
+}
+
+static void vvp_thread_key_fini(const struct lu_context *ctx,
+                               struct lu_context_key *key, void *data)
+{
+       struct vvp_thread_info *vti = data;
+       OBD_SLAB_FREE_PTR(vti, vvp_thread_kmem);
+}
+
+struct lu_context_key vvp_thread_key = {
+       .lct_tags = LCT_CL_THREAD,
+       .lct_init = vvp_thread_key_init,
+       .lct_fini = vvp_thread_key_fini,
+};
+
 /* type constructor/destructor: vvp_type_{init,fini,start,stop}(). */
-LU_TYPE_INIT_FINI(vvp, &ccc_key, &vvp_key, &vvp_session_key);
+LU_TYPE_INIT_FINI(vvp, &ll_thread_key, &vvp_session_key, &vvp_thread_key);
 
 static const struct lu_device_operations vvp_lu_ops = {
         .ldo_object_alloc      = vvp_object_alloc
 };
 
-static const struct cl_device_operations vvp_cl_ops = {
-        .cdo_req_init = ccc_req_init
-};
-
 static struct lu_device *vvp_device_free(const struct lu_env *env,
                                         struct lu_device *d)
 {
@@ -181,7 +208,6 @@ static struct lu_device *vvp_device_alloc(const struct lu_env *env,
        lud = &vdv->vdv_cl.cd_lu_dev;
        cl_device_init(&vdv->vdv_cl, t);
        vvp2lu_dev(vdv)->ld_ops = &vvp_lu_ops;
-       vdv->vdv_cl.cd_ops = &vvp_cl_ops;
 
        OBD_ALLOC_PTR(site);
        if (site != NULL) {
@@ -255,24 +281,30 @@ struct lu_device_type vvp_device_type = {
  */
 int vvp_global_init(void)
 {
-        int result;
+       int rc;
 
-        result = lu_kmem_init(vvp_caches);
-        if (result == 0) {
-                result = ccc_global_init(&vvp_device_type);
-                if (result != 0)
-                        lu_kmem_fini(vvp_caches);
-        }
-        return result;
+       rc = lu_kmem_init(vvp_caches);
+       if (rc != 0)
+               return rc;
+
+       rc = lu_device_type_init(&vvp_device_type);
+       if (rc != 0)
+               goto out_kmem;
+
+       return 0;
+
+out_kmem:
+       lu_kmem_fini(vvp_caches);
+
+       return rc;
 }
 
 void vvp_global_fini(void)
 {
-        ccc_global_fini(&vvp_device_type);
-        lu_kmem_fini(vvp_caches);
+       lu_device_type_fini(&vvp_device_type);
+       lu_kmem_fini(vvp_caches);
 }
 
-
 /*****************************************************************************
  *
  * mirror obd-devices into cl devices.
@@ -285,7 +317,7 @@ int cl_sb_init(struct super_block *sb)
         struct cl_device  *cl;
         struct lu_env     *env;
         int rc = 0;
-        int refcheck;
+       __u16 refcheck;
 
         sbi  = ll_s2sbi(sb);
         env = cl_env_get(&refcheck);
@@ -293,7 +325,6 @@ int cl_sb_init(struct super_block *sb)
                 cl = cl_type_setup(env, NULL, &vvp_device_type,
                                    sbi->ll_dt_exp->exp_obd->obd_lu_dev);
                 if (!IS_ERR(cl)) {
-                       cl2vvp_dev(cl)->vdv_sb = sb;
                         sbi->ll_cl = cl;
                         sbi->ll_site = cl2lu_dev(cl)->ld_site;
                 }
@@ -308,7 +339,7 @@ int cl_sb_fini(struct super_block *sb)
         struct ll_sb_info *sbi;
         struct lu_env     *env;
         struct cl_device  *cld;
-        int                refcheck;
+       __u16              refcheck;
         int                result;
 
         ENTRY;
@@ -380,7 +411,7 @@ static loff_t vvp_pgcache_id_pack(struct vvp_pgcache_id *id)
                 ((__u64)id->vpi_bucket << PGC_OBJ_SHIFT);
 }
 
-static int vvp_pgcache_obj_get(cfs_hash_t *hs, cfs_hash_bd_t *bd,
+static int vvp_pgcache_obj_get(struct cfs_hash *hs, struct cfs_hash_bd *bd,
                               struct hlist_node *hnode, void *data)
 {
         struct vvp_pgcache_id   *id  = data;
@@ -483,11 +514,10 @@ static void vvp_pgcache_page_show(const struct lu_env *env,
 
        vpg = cl2vvp_page(cl_page_at(page, &vvp_device_type));
        vmpage = vpg->vpg_page;
-       seq_printf(seq, " %5i | %p %p %s %s %s %s | %p "DFID"(%p) %lu %u [",
+       seq_printf(seq, " %5i | %p %p %s %s %s | %p "DFID"(%p) %lu %u [",
                   0 /* gen */,
                   vpg, page,
                   "none",
-                  vpg->vpg_write_queued ? "wq" : "- ",
                   vpg->vpg_defer_uptodate ? "du" : "- ",
                   PageWriteback(vmpage) ? "wb" : "-",
                   vmpage,
@@ -511,7 +541,7 @@ static int vvp_pgcache_show(struct seq_file *f, void *v)
        struct cl_object        *clob;
        struct lu_env           *env;
        struct vvp_pgcache_id    id;
-       int                      refcheck;
+       __u16                    refcheck;
        int                      result;
 
        env = cl_env_get(&refcheck);
@@ -557,7 +587,7 @@ static void *vvp_pgcache_start(struct seq_file *f, loff_t *pos)
 {
         struct ll_sb_info *sbi;
         struct lu_env     *env;
-        int                refcheck;
+       __u16              refcheck;
 
         sbi = f->private;
 
@@ -581,7 +611,7 @@ static void *vvp_pgcache_next(struct seq_file *f, void *v, loff_t *pos)
 {
         struct ll_sb_info *sbi;
         struct lu_env     *env;
-        int                refcheck;
+       __u16              refcheck;
 
         env = cl_env_get(&refcheck);
         if (!IS_ERR(env)) {