Whamcloud - gitweb
LU-13324 llite: page delete race 93/37793/4
authorBobi Jam <bobijam@whamcloud.com>
Tue, 10 Mar 2020 13:12:53 +0000 (21:12 +0800)
committerOleg Drokin <green@whamcloud.com>
Tue, 31 Mar 2020 07:01:02 +0000 (07:01 +0000)
Page could be raced by truncate during its deletion by
another thread, check vmpage mapping before accessing it.

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

index 0c9d552..d7092e4 100644 (file)
@@ -156,7 +156,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);
 
        generic_error_remove_page(vmpage->mapping, vmpage);
@@ -166,14 +166,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);