From 1ffa416586c6abb53a72031f0286aecf3da4bd01 Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Tue, 10 Mar 2020 21:12:53 +0800 Subject: [PATCH] LU-13324 llite: page delete race 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 Change-Id: I3172f5ffd3928926b16ab6fd7362b05da0c7cfd5 Reviewed-by: Wang Shilong Reviewed-by: Andreas Dilger Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/38111 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/llite/vvp_page.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c index 064e86e..0f4e2a9 100644 --- a/lustre/llite/vvp_page.c +++ b/lustre/llite/vvp_page.c @@ -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); -- 1.8.3.1