From 27c079d110cc2867dc0db8452695f37c24f77215 Mon Sep 17 00:00:00 2001 From: Jinshan Xiong Date: Thu, 29 Sep 2016 14:31:01 -0700 Subject: [PATCH] LU-8633 llite: do not clear uptodate bit in page delete Otherwise, if the race between page fault and truncate occurs, it will cause the page fault routine to return an EIO error. In filemap_fault() { page_not_uptodate: ... ClearPageError(page); error = mapping->a_ops->readpage(file, page); if (!error) { wait_on_page_locked(page); if (!PageUptodate(page)) error = -EIO; } ... } However, I tend to think this is a defect in kernel implementation, because it assumes PageUptodate shouldn't be cleared but file read routine doesn't make the same assumption. Signed-off-by: Jinshan Xiong Change-Id: Ic4a919607a6121098e41eaf56b8ce3200f778ecf Reviewed-on: http://review.whamcloud.com/22827 Tested-by: Maloo Tested-by: Jenkins Reviewed-by: Li Dongyang Reviewed-by: Bobi Jam Reviewed-by: Oleg Drokin --- lustre/llite/vvp_page.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c index c530730..6d1c770 100644 --- a/lustre/llite/vvp_page.c +++ b/lustre/llite/vvp_page.c @@ -167,7 +167,6 @@ static void vvp_page_delete(const struct lu_env *env, refc = atomic_dec_return(&page->cp_ref); LASSERTF(refc >= 1, "page = %p, refc = %d\n", page, refc); - ClearPageUptodate(vmpage); ClearPagePrivate(vmpage); vmpage->private = 0; /* -- 1.8.3.1