Whamcloud - gitweb
LU-13324 llite: page delete race 11/38111/3
authorBobi Jam <bobijam@whamcloud.com>
Tue, 10 Mar 2020 13:12:53 +0000 (21:12 +0800)
committerOleg Drokin <green@whamcloud.com>
Sun, 19 Apr 2020 08:50:03 +0000 (08:50 +0000)
Page could be raced by truncate during its deletion by
another thread, check vmpage mapping before accessing it.

Lustre-change: https://review.whamcloud.com/37793
Lustre-commit: 8ccaed513006f0582578ff42c9917b5aa76f2f4b

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: I3172f5ffd3928926b16ab6fd7362b05da0c7cfd5
Reviewed-by: Wang Shilong <wshilong@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/38111
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/vvp_page.c

index 064e86e..0f4e2a9 100644 (file)
@@ -150,7 +150,7 @@ static void vvp_page_discard(const struct lu_env *env,
        LASSERT(vmpage != NULL);
        LASSERT(PageLocked(vmpage));
 
-       if (vpg->vpg_defer_uptodate && !vpg->vpg_ra_used)
+       if (vpg->vpg_defer_uptodate && !vpg->vpg_ra_used && vmpage->mapping)
                ll_ra_stats_inc(vmpage->mapping->host, RA_STAT_DISCARDED);
 
        ll_invalidate_page(vmpage);
@@ -160,14 +160,12 @@ static void vvp_page_delete(const struct lu_env *env,
                            const struct cl_page_slice *slice)
 {
        struct page      *vmpage = cl2vm_page(slice);
-       struct inode     *inode  = vmpage->mapping->host;
-       struct cl_object *obj    = slice->cpl_obj;
        struct cl_page   *page   = slice->cpl_page;
        int refc;
 
        LASSERT(PageLocked(vmpage));
        LASSERT((struct cl_page *)vmpage->private == page);
-       LASSERT(inode == vvp_object_inode(obj));
+
 
        /* Drop the reference count held in vvp_page_init */
        refc = atomic_dec_return(&page->cp_ref);