From 4733a3c50e151bdeb13a69ced68bbc14ba49e911 Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Fri, 23 Feb 2024 11:05:35 -0500 Subject: [PATCH] LU-13814 osc: specialize osc_page_delete Nearly all of osc_page_delete is only done for cacheable pages, so make that explicit. osc_lru_del() doesn't do anything because transient pages can't go in the LRU. In osc_teardown_async_page(), the latter side of the if statement is a search in cache, so it never finds the page, then the earlier part is a check that the page isn't in an RPC. That's not really possible for DIO pages unless something is *really* off. Signed-off-by: Patrick Farrell Change-Id: I998fc196c276aa97829f5b368e23aa4b7a797294 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52078 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin Reviewed-by: Sebastien Buisson --- lustre/osc/osc_page.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lustre/osc/osc_page.c b/lustre/osc/osc_page.c index b97d4f9..db009e2 100644 --- a/lustre/osc/osc_page.c +++ b/lustre/osc/osc_page.c @@ -169,18 +169,19 @@ static void osc_page_delete(const struct lu_env *env, ENTRY; 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, slice->cpl_page, - "Trying to teardown failed: %d\n", rc); - LASSERT(0); - } - - osc_lru_del(osc_cli(obj), opg); if (slice->cpl_page->cp_type == CPT_CACHEABLE) { void *value = NULL; + rc = osc_teardown_async_page(env, obj, opg); + if (rc) { + CL_PAGE_DEBUG(D_ERROR, env, slice->cpl_page, + "Trying to teardown failed: %d\n", rc); + LASSERT(0); + } + + osc_lru_del(osc_cli(obj), opg); + spin_lock(&obj->oo_tree_lock); if (opg->ops_intree) { value = radix_tree_delete(&obj->oo_tree, -- 1.8.3.1