These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / lustre / lustre / obdclass / cl_page.c
index b7dd048..2f569ed 100644 (file)
 static void cl_page_delete0(const struct lu_env *env, struct cl_page *pg,
                            int radix);
 
-# define PASSERT(env, page, expr)                                     \
-  do {                                                             \
-         if (unlikely(!(expr))) {                                    \
-                 CL_PAGE_DEBUG(D_ERROR, (env), (page), #expr "\n");    \
-                 LASSERT(0);                                      \
-         }                                                          \
-  } while (0)
+# define PASSERT(env, page, expr)                                         \
+       do {                                                               \
+               if (unlikely(!(expr))) {                                   \
+                       CL_PAGE_DEBUG(D_ERROR, (env), (page), #expr "\n"); \
+                       LASSERT(0);                                        \
+               }                                                          \
+       } while (0)
 
 # define PINVRNT(env, page, exp) \
        ((void)sizeof(env), (void)sizeof(page), (void)sizeof !!(exp))
 
-/* Disable page statistic by default due to huge performance penalty. */
-#define CS_PAGE_INC(o, item)
-#define CS_PAGE_DEC(o, item)
-#define CS_PAGESTATE_INC(o, state)
-#define CS_PAGESTATE_DEC(o, state)
-
 /**
  * Internal version of cl_page_top, it should be called if the page is
  * known to be not freed, says with page referenced, or radix tree lock held,
@@ -175,6 +169,7 @@ int cl_page_gang_lookup(const struct lu_env *env, struct cl_object *obj,
        while ((nr = radix_tree_gang_lookup(&hdr->coh_tree, (void **)pvec,
                                            idx, CLT_PVEC_SIZE)) > 0) {
                int end_of_region = 0;
+
                idx = pvec[nr - 1]->cp_index + 1;
                for (i = 0, j = 0; i < nr; ++i) {
                        page = pvec[i];
@@ -248,7 +243,6 @@ EXPORT_SYMBOL(cl_page_gang_lookup);
 static void cl_page_free(const struct lu_env *env, struct cl_page *page)
 {
        struct cl_object *obj  = page->cp_obj;
-       int pagesize = cl_object_header(obj)->coh_page_bufsize;
 
        PASSERT(env, page, list_empty(&page->cp_batch));
        PASSERT(env, page, page->cp_owner == NULL);
@@ -265,12 +259,10 @@ static void cl_page_free(const struct lu_env *env, struct cl_page *page)
                list_del_init(page->cp_layers.next);
                slice->cpl_ops->cpo_fini(env, slice);
        }
-       CS_PAGE_DEC(obj, total);
-       CS_PAGESTATE_DEC(obj, page->cp_state);
        lu_object_ref_del_at(&obj->co_lu, &page->cp_obj_ref, "cl_page", page);
        cl_object_put(env, obj);
        lu_ref_fini(&page->cp_reference);
-       OBD_FREE(page, pagesize);
+       kfree(page);
 }
 
 /**
@@ -291,10 +283,10 @@ static struct cl_page *cl_page_alloc(const struct lu_env *env,
        struct cl_page    *page;
        struct lu_object_header *head;
 
-       OBD_ALLOC_GFP(page, cl_object_header(o)->coh_page_bufsize,
-                       GFP_NOFS);
+       page = kzalloc(cl_object_header(o)->coh_page_bufsize, GFP_NOFS);
        if (page != NULL) {
                int result = 0;
+
                atomic_set(&page->cp_ref, 1);
                if (type == CPT_CACHEABLE) /* for radix tree */
                        atomic_inc(&page->cp_ref);
@@ -324,11 +316,6 @@ static struct cl_page *cl_page_alloc(const struct lu_env *env,
                                }
                        }
                }
-               if (result == 0) {
-                       CS_PAGE_INC(o, total);
-                       CS_PAGE_INC(o, create);
-                       CS_PAGESTATE_DEC(o, CPS_CACHED);
-               }
        } else {
                page = ERR_PTR(-ENOMEM);
        }
@@ -361,14 +348,15 @@ static struct cl_page *cl_page_find0(const struct lu_env *env,
        might_sleep();
 
        hdr = cl_object_header(o);
-       CS_PAGE_INC(o, lookup);
 
        CDEBUG(D_PAGE, "%lu@"DFID" %p %lx %d\n",
               idx, PFID(&hdr->coh_lu.loh_fid), vmpage, vmpage->private, type);
        /* fast path. */
        if (type == CPT_CACHEABLE) {
-               /* vmpage lock is used to protect the child/parent
-                * relationship */
+               /*
+                * vmpage lock is used to protect the child/parent
+                * relationship
+                */
                KLASSERT(PageLocked(vmpage));
                /*
                 * cl_vmpage_page() can be called here without any locks as
@@ -387,10 +375,8 @@ static struct cl_page *cl_page_find0(const struct lu_env *env,
                                                       idx) == page));
        }
 
-       if (page != NULL) {
-               CS_PAGE_INC(o, hit);
+       if (page != NULL)
                return page;
-       }
 
        /* allocate and initialize cl_page */
        page = cl_page_alloc(env, o, idx, vmpage, type);
@@ -455,7 +441,6 @@ struct cl_page *cl_page_find(const struct lu_env *env, struct cl_object *o,
 }
 EXPORT_SYMBOL(cl_page_find);
 
-
 struct cl_page *cl_page_find_sub(const struct lu_env *env, struct cl_object *o,
                                 pgoff_t idx, struct page *vmpage,
                                 struct cl_page *parent)
@@ -555,8 +540,6 @@ static void cl_page_state_set0(const struct lu_env *env,
                PASSERT(env, page,
                        equi(state == CPS_OWNED, page->cp_owner != NULL));
 
-               CS_PAGESTATE_DEC(page->cp_obj, page->cp_state);
-               CS_PAGESTATE_INC(page->cp_obj, state);
                cl_page_state_set_trust(page, state);
        }
 }
@@ -919,7 +902,6 @@ int cl_page_own_try(const struct lu_env *env, struct cl_io *io,
 }
 EXPORT_SYMBOL(cl_page_own_try);
 
-
 /**
  * Assume page ownership.
  *
@@ -1207,9 +1189,6 @@ int cl_page_prep(const struct lu_env *env, struct cl_io *io,
        if (result == 0)
                cl_page_io_start(env, pg, crt);
 
-       KLASSERT(ergo(crt == CRT_WRITE && pg->cp_type == CPT_CACHEABLE,
-                     equi(result == 0,
-                          PageWriteback(cl_page_vmpage(env, pg)))));
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, result);
        return result;
 }
@@ -1443,7 +1422,7 @@ void cl_page_clip(const struct lu_env *env, struct cl_page *pg,
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", from, to);
        CL_PAGE_INVOID(env, pg, CL_PAGE_OP(cpo_clip),
                       (const struct lu_env *,
-                       const struct cl_page_slice *,int, int),
+                       const struct cl_page_slice *, int, int),
                       from, to);
 }
 EXPORT_SYMBOL(cl_page_clip);