From: Bobi Jam Date: Tue, 10 Mar 2020 13:12:53 +0000 (+0800) Subject: LU-13324 llite: page delete race X-Git-Tag: 2.12.5-RC1~37 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F11%2F38111%2F3;p=fs%2Flustre-release.git 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 --- 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);