Whamcloud - gitweb
LU-13814 osc: specialize osc_page_delete 78/52078/20
authorPatrick Farrell <pfarrell@whamcloud.com>
Fri, 23 Feb 2024 16:05:35 +0000 (11:05 -0500)
committerOleg Drokin <green@whamcloud.com>
Tue, 21 May 2024 18:16:46 +0000 (18:16 +0000)
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 <patrick.farrell@oracle.com>
Change-Id: I998fc196c276aa97829f5b368e23aa4b7a797294
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52078
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.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 b97d4f9..db009e2 100644 (file)
@@ -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,