Whamcloud - gitweb
LU-14541 llite: avoid stale data reading 76/43476/5
authorWang Shilong <wshilong@ddn.com>
Wed, 28 Apr 2021 14:26:10 +0000 (22:26 +0800)
committerOleg Drokin <green@whamcloud.com>
Thu, 22 Jul 2021 01:49:02 +0000 (01:49 +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.

Signed-off-by: Wang Shilong <wshilong@ddn.com>
Change-Id: I322debec951b1a342246475456c0f40e10b0e578
Reviewed-on: https://review.whamcloud.com/43476
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/vvp_page.c

index d0e274c..d5158e7 100644 (file)
@@ -178,6 +178,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().