Whamcloud - gitweb
LU-13814 osc: add osc transient page ops 77/52077/19
authorPatrick Farrell <pfarrell@whamcloud.com>
Fri, 23 Feb 2024 16:05:11 +0000 (11:05 -0500)
committerOleg Drokin <green@whamcloud.com>
Tue, 23 Apr 2024 19:44:16 +0000 (19:44 +0000)
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.

Signed-off-by: Patrick Farrell <patrick.farrell@oracle.com>
Change-Id: I20bbe7535e8df223ec1fff9b940b3063fcc3f8d7
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52077
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Qian Yingjin <qian@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
lustre/osc/osc_page.c

index ab80ada..7c54153 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,
@@ -259,10 +265,13 @@ int osc_page_init(const struct lu_env *env, struct cl_object *obj,
                return result;
 
        opg->ops_srvlock = osc_io_srvlock(oio);
-       cl_page_slice_add(cl_page, &opg->ops_cl, obj, &osc_page_ops);
 
-       /* 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);