Whamcloud - gitweb
LU-13814 osc: add osc transient page ops 77/52077/10
authorPatrick Farrell <pfarrell@whamcloud.com>
Sun, 17 Sep 2023 18:09:01 +0000 (14:09 -0400)
committerPatrick Farrell <pfarrell@whamcloud.com>
Sun, 17 Sep 2023 19:00:02 +0000 (15:00 -0400)
As part of gradually removing cl_pages for transient pages,
create a special set of OSC page operations for them.

This makes it easier to see what's left for transient pages
and focus on removing that.

Test-Parameters: forjanitoronly
Test-Parameters: fortestonly
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I20bbe7535e8df223ec1fff9b940b3063fcc3f8d7

lustre/osc/osc_page.c

index 3e8411d..f5b7def 100644 (file)
@@ -233,6 +233,12 @@ static void osc_page_touch(const struct lu_env *env,
        osc_page_touch_at(env, obj, osc_index(opg), to);
 }
 
+static const struct cl_page_operations osc_transient_page_ops = {
+       .cpo_print         = osc_page_print,
+       .cpo_delete        = osc_page_delete,
+       .cpo_clip           = osc_page_clip,
+};
+
 static const struct cl_page_operations osc_page_ops = {
        .cpo_print         = osc_page_print,
        .cpo_delete        = osc_page_delete,
@@ -256,7 +262,6 @@ int osc_page_init(const struct lu_env *env, struct cl_io *io,
                return result;
 
        opg->ops_srvlock = osc_io_srvlock(oio);
-       cl_page_slice_add(cl_page, &opg->ops_cl, obj, &osc_page_ops);
 
        if ((lnet_is_rdma_only_page(cl_page->cp_vmpage) ||
            CFS_FAIL_CHECK(OBD_FAIL_OSC_UNALIGNED_RDMA_ONLY)) &&
@@ -270,8 +275,12 @@ int osc_page_init(const struct lu_env *env, struct cl_io *io,
                return -EINVAL;
        }
 
-       /* reserve an LRU space for this page */
-       if (cl_page->cp_type == CPT_CACHEABLE) {
+       if (cl_page->cp_type == CPT_TRANSIENT) {
+               cl_page_slice_add(cl_page, &opg->ops_cl, obj,
+                                 &osc_transient_page_ops);
+       } else if (cl_page->cp_type == CPT_CACHEABLE) {
+               cl_page_slice_add(cl_page, &opg->ops_cl, obj, &osc_page_ops);
+               /* reserve an LRU space for this page */
                result = osc_lru_alloc(env, osc_cli(osc), opg);
                if (result == 0) {
                        result = radix_tree_preload(GFP_NOFS);