Whamcloud - gitweb
LU-3321 clio: remove stackable cl_page completely
[fs/lustre-release.git] / lustre / osc / osc_page.c
index a4dc541..97ad0d0 100644 (file)
@@ -82,15 +82,15 @@ static int osc_page_is_dlocked(const struct lu_env *env,
        page = opg->ops_cl.cpl_page;
        obj = cl2osc(opg->ops_cl.cpl_obj);
 
-        flags = LDLM_FL_TEST_LOCK | LDLM_FL_BLOCK_GRANTED;
-        if (pending)
-                flags |= LDLM_FL_CBPENDING;
-
-        dlmmode = osc_cl_lock2ldlm(mode) | LCK_PW;
-        osc_lock_build_res(env, obj, resname);
-        osc_index2policy(policy, page->cp_obj, page->cp_index, page->cp_index);
-        return osc_match_base(osc_export(obj), resname, LDLM_EXTENT, policy,
-                              dlmmode, &flags, NULL, lockh, unref);
+       flags = LDLM_FL_TEST_LOCK | LDLM_FL_BLOCK_GRANTED;
+       if (pending)
+               flags |= LDLM_FL_CBPENDING;
+
+       dlmmode = osc_cl_lock2ldlm(mode) | LCK_PW;
+       osc_lock_build_res(env, obj, resname);
+       osc_index2policy(policy, page->cp_obj, osc_index(opg), osc_index(opg));
+       return osc_match_base(osc_export(obj), resname, LDLM_EXTENT, policy,
+                             dlmmode, &flags, NULL, lockh, unref);
 }
 
 /**
@@ -125,8 +125,8 @@ static int osc_page_protected(const struct lu_env *env,
                 hdr = cl_object_header(opg->ops_cl.cpl_obj);
                 descr = &osc_env_info(env)->oti_descr;
                 descr->cld_mode = mode;
-                descr->cld_start = page->cp_index;
-                descr->cld_end   = page->cp_index;
+               descr->cld_start = osc_index(opg);
+               descr->cld_end   = osc_index(opg);
                spin_lock(&hdr->coh_lock_guard);
                 cfs_list_for_each_entry(scan, &hdr->coh_locks, cll_linkage) {
                         /*
@@ -163,25 +163,20 @@ static int osc_page_protected(const struct lu_env *env,
  * Page operations.
  *
  */
-static void osc_page_fini(const struct lu_env *env,
-                          struct cl_page_slice *slice)
-{
-}
-
 static void osc_page_transfer_get(struct osc_page *opg, const char *label)
 {
-        struct cl_page *page = cl_page_top(opg->ops_cl.cpl_page);
+       struct cl_page *page = opg->ops_cl.cpl_page;
 
-        LASSERT(!opg->ops_transfer_pinned);
-        cl_page_get(page);
-        lu_ref_add_atomic(&page->cp_reference, label, page);
-        opg->ops_transfer_pinned = 1;
+       LASSERT(!opg->ops_transfer_pinned);
+       cl_page_get(page);
+       lu_ref_add_atomic(&page->cp_reference, label, page);
+       opg->ops_transfer_pinned = 1;
 }
 
 static void osc_page_transfer_put(const struct lu_env *env,
                                  struct osc_page *opg)
 {
-       struct cl_page *page = cl_page_top(opg->ops_cl.cpl_page);
+       struct cl_page *page = opg->ops_cl.cpl_page;
 
        if (opg->ops_transfer_pinned) {
                opg->ops_transfer_pinned = 0;
@@ -241,17 +236,18 @@ static int osc_page_is_under_lock(const struct lu_env *env,
                                   const struct cl_page_slice *slice,
                                   struct cl_io *unused)
 {
-        struct cl_lock *lock;
-        int             result = -ENODATA;
+       struct osc_page *opg = cl2osc_page(slice);
+       struct cl_lock *lock;
+       int             result = -ENODATA;
 
-        ENTRY;
-        lock = cl_lock_at_page(env, slice->cpl_obj, slice->cpl_page,
-                               NULL, 1, 0);
-        if (lock != NULL) {
+       ENTRY;
+       lock = cl_lock_at_pgoff(env, slice->cpl_obj, osc_index(opg),
+                       NULL, 1, 0);
+       if (lock != NULL) {
                cl_lock_put(env, lock);
                result = -EBUSY;
        }
-        RETURN(result);
+       RETURN(result);
 }
 
 static const char *osc_list(cfs_list_t *head)
@@ -276,13 +272,13 @@ static int osc_page_print(const struct lu_env *env,
         struct osc_object     *obj = cl2osc(slice->cpl_obj);
         struct client_obd     *cli = &osc_export(obj)->exp_obd->u.cli;
 
-        return (*printer)(env, cookie, LUSTRE_OSC_NAME"-page@%p: "
+       return (*printer)(env, cookie, LUSTRE_OSC_NAME"-page@%p %lu: "
                          "1< %#x %d %u %s %s > "
                          "2< "LPU64" %u %u %#x %#x | %p %p %p > "
                          "3< %s %p %d %lu %d > "
                          "4< %d %d %d %lu %s | %s %s %s %s > "
                          "5< %s %s %s %s | %d %s | %d %s %s>\n",
-                          opg,
+                         opg, osc_index(opg),
                           /* 1 */
                           oap->oap_magic, oap->oap_cmd,
                           oap->oap_interrupted,
@@ -330,11 +326,11 @@ static void osc_page_delete(const struct lu_env *env,
         CDEBUG(D_TRACE, "%p\n", opg);
         osc_page_transfer_put(env, opg);
        rc = osc_teardown_async_page(env, obj, opg);
-        if (rc) {
-                CL_PAGE_DEBUG(D_ERROR, env, cl_page_top(slice->cpl_page),
-                              "Trying to teardown failed: %d\n", rc);
-                LASSERT(0);
-        }
+       if (rc) {
+               CL_PAGE_DEBUG(D_ERROR, env, slice->cpl_page,
+                             "Trying to teardown failed: %d\n", rc);
+               LASSERT(0);
+       }
 
        spin_lock(&obj->oo_seatbelt);
        if (opg->ops_submitter != NULL) {
@@ -405,7 +401,6 @@ static int osc_page_flush(const struct lu_env *env,
 }
 
 static const struct cl_page_operations osc_page_ops = {
-       .cpo_fini          = osc_page_fini,
        .cpo_print         = osc_page_print,
        .cpo_delete        = osc_page_delete,
        .cpo_is_under_lock = osc_page_is_under_lock,
@@ -415,7 +410,7 @@ static const struct cl_page_operations osc_page_ops = {
 };
 
 int osc_page_init(const struct lu_env *env, struct cl_object *obj,
-                 struct cl_page *page, struct page *vmpage)
+                 struct cl_page *page, pgoff_t index)
 {
        struct osc_object *osc = cl2osc(obj);
        struct osc_page   *opg = cl_object_page_slice(obj, page);
@@ -423,9 +418,10 @@ int osc_page_init(const struct lu_env *env, struct cl_object *obj,
 
        opg->ops_from = 0;
        opg->ops_to   = PAGE_CACHE_SIZE;
+       opg->ops_cl.cpl_index = index;
 
-       result = osc_prep_async_page(osc, opg, vmpage,
-                                       cl_offset(obj, page->cp_index));
+       result = osc_prep_async_page(osc, opg, page->cp_vmpage,
+                                    cl_offset(obj, index));
        if (result == 0) {
                struct osc_io *oio = osc_env_io(env);
                opg->ops_srvlock = osc_io_srvlock(oio);
@@ -449,8 +445,7 @@ int osc_page_init(const struct lu_env *env, struct cl_object *obj,
                result = osc_lru_reserve(env, osc, opg);
                if (result == 0) {
                        spin_lock(&osc->oo_tree_lock);
-                       result = radix_tree_insert(&osc->oo_tree,
-                                                  page->cp_index, opg);
+                       result = radix_tree_insert(&osc->oo_tree, index, opg);
                        if (result == 0)
                                ++osc->oo_npages;
                        spin_unlock(&osc->oo_tree_lock);
@@ -720,7 +715,7 @@ int osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
 
                opg = cfs_list_entry(cli->cl_lru_list.next, struct osc_page,
                                     ops_lru);
-               page = cl_page_top(opg->ops_cl.cpl_page);
+               page = opg->ops_cl.cpl_page;
                if (cl_page_in_use_noref(page)) {
                        cfs_list_move_tail(&opg->ops_lru, &cli->cl_lru_list);
                        continue;