From: Patrick Farrell Date: Fri, 23 Feb 2024 16:05:35 +0000 (-0500) Subject: LU-13814 osc: specialize osc_page_delete X-Git-Tag: 2.15.64~238 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=4733a3c50e151bdeb13a69ced68bbc14ba49e911;p=fs%2Flustre-release.git 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 --- 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,