Whamcloud - gitweb
LU-13814 clio: further transient own/disown removal 82/52082/20
authorPatrick Farrell <paf0187@gmail.com>
Fri, 12 Jul 2024 15:53:56 +0000 (11:53 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 31 Jul 2024 15:56:26 +0000 (15:56 +0000)
This patch goes a bit further in removing own/disown for
transient pages, including adding asserts that the code is
not called for transient pages.

Signed-off-by: Patrick Farrell <patrick.farrell@oracle.com>
Change-Id: Ibad555e50088adc53a66d0e4aeba5558ac2b6a06
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52082
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Qian Yingjin <qian@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/rw26.c
lustre/obdclass/cl_io.c
lustre/obdclass/cl_page.c

index 72851ae..b84e686 100644 (file)
@@ -451,7 +451,6 @@ ll_direct_rw_pages(const struct lu_env *env, struct cl_io *io, size_t size,
        }
 
 out:
-       cl_2queue_disown(env, queue);
        cl_2queue_fini(env, queue);
        RETURN(rc);
 }
index f00699c..1fb6d8c 100644 (file)
@@ -944,8 +944,7 @@ void cl_page_list_disown(const struct lu_env *env, struct cl_page_list *plist)
                /*
                 * XXX __cl_page_disown() will fail if page is not locked.
                 */
-               if (page->cp_type == CPT_CACHEABLE)
-                       __cl_page_disown(env, page);
+               __cl_page_disown(env, page);
                cl_page_put(env, page);
        }
        EXIT;
index 3cc5e0b..985b424 100644 (file)
@@ -541,18 +541,17 @@ void __cl_page_disown(const struct lu_env *env, struct cl_page *cp)
        enum cl_page_state state;
 
        ENTRY;
-       if (cp->cp_type == CPT_CACHEABLE) {
-               cl_page_owner_clear(cp);
-               state = cp->cp_state;
-               PINVRNT(env, cp, state == CPS_OWNED || state == CPS_FREEING);
-               PINVRNT(env, cp, cl_page_invariant(cp) || state == CPS_FREEING);
-               if (state == CPS_OWNED)
-                       cl_page_state_set(env, cp, CPS_CACHED);
-               vmpage = cp->cp_vmpage;
-               LASSERT(vmpage != NULL);
-               LASSERT(PageLocked(vmpage));
-               unlock_page(vmpage);
-       }
+
+       cl_page_owner_clear(cp);
+       state = cp->cp_state;
+       PINVRNT(env, cp, state == CPS_OWNED || state == CPS_FREEING);
+       PINVRNT(env, cp, cl_page_invariant(cp) || state == CPS_FREEING);
+       if (state == CPS_OWNED)
+               cl_page_state_set(env, cp, CPS_CACHED);
+       vmpage = cp->cp_vmpage;
+       LASSERT(vmpage != NULL);
+       LASSERT(PageLocked(vmpage));
+       unlock_page(vmpage);
 
        EXIT;
 }
@@ -597,10 +596,11 @@ static int __cl_page_own(const struct lu_env *env, struct cl_io *io,
        int result;
 
        ENTRY;
-       PINVRNT(env, cl_page, !cl_page_is_owned(cl_page, io));
 
        LASSERT(cl_page->cp_type != CPT_TRANSIENT);
 
+       PINVRNT(env, cl_page, !cl_page_is_owned(cl_page, io));
+
        if (cl_page->cp_type != CPT_TRANSIENT &&
            cl_page->cp_state == CPS_FREEING) {
                result = -ENOENT;
@@ -735,10 +735,10 @@ EXPORT_SYMBOL(cl_page_unassume);
 void cl_page_disown(const struct lu_env *env,
                    struct cl_io *io, struct cl_page *pg)
 {
-       if (pg->cp_type != CPT_TRANSIENT) {
-               PINVRNT(env, pg, cl_page_is_owned(pg, cl_io_top(io)) ||
-                       pg->cp_state == CPS_FREEING);
-       }
+       LASSERT(pg->cp_type != CPT_TRANSIENT);
+
+       PINVRNT(env, pg, cl_page_is_owned(pg, cl_io_top(io)) ||
+               pg->cp_state == CPS_FREEING);
 
        __cl_page_disown(env, pg);
 }