From 7a75af156f536e6d9d69af7154949a597099c99f Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Fri, 12 Jul 2024 11:53:56 -0400 Subject: [PATCH] LU-13814 clio: further transient own/disown removal 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 Change-Id: Ibad555e50088adc53a66d0e4aeba5558ac2b6a06 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52082 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Qian Yingjin Reviewed-by: Oleg Drokin --- lustre/llite/rw26.c | 1 - lustre/obdclass/cl_io.c | 3 +-- lustre/obdclass/cl_page.c | 34 +++++++++++++++++----------------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c index 72851ae..b84e686 100644 --- a/lustre/llite/rw26.c +++ b/lustre/llite/rw26.c @@ -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); } diff --git a/lustre/obdclass/cl_io.c b/lustre/obdclass/cl_io.c index f00699c..1fb6d8c 100644 --- a/lustre/obdclass/cl_io.c +++ b/lustre/obdclass/cl_io.c @@ -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; diff --git a/lustre/obdclass/cl_page.c b/lustre/obdclass/cl_page.c index 3cc5e0b..985b424 100644 --- a/lustre/obdclass/cl_page.c +++ b/lustre/obdclass/cl_page.c @@ -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); } -- 1.8.3.1