Whamcloud - gitweb
LU-14541 llite: avoid stale data reading
authorWang Shilong <wshilong@ddn.com>
Wed, 28 Apr 2021 14:26:10 +0000 (22:26 +0800)
committerAndreas Dilger <adilger@whamcloud.com>
Thu, 15 Jul 2021 19:15:17 +0000 (19:15 +0000)
remove_mapping() can prohibit to kill page from page cache due page
refcount!=2, in vvp_page_delete() clear uptodate flag in case
stale data reading later.

Lustre-change: https://review.whamcloud.com/43476
Lustre-commit: TBD (from e6033b193e8d35e689b7c2860374c8b2d2b7a5ee)

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

index fb9c387..831e432 100644 (file)
@@ -179,6 +179,12 @@ static void vvp_page_delete(const struct lu_env *env,
 
        ClearPagePrivate(vmpage);
        vmpage->private = 0;
+
+       /**
+        * Vmpage might not be released due page refcount != 2,
+        * clear Page uptodate here to avoid stale data.
+        */
+       ClearPageUptodate(vmpage);
        /*
         * Reference from vmpage to cl_page is removed, but the reference back
         * is still here. It is removed later in vvp_page_fini().