Commit e0050ac1 authored by Li Wang's avatar Li Wang Committed by Greg Kroah-Hartman

ceph: Avoid data inconsistency due to d-cache aliasing in readpage()

commit 56f91aad upstream.

If the length of data to be read in readpage() is exactly
PAGE_CACHE_SIZE, the original code does not flush d-cache
for data consistency after finishing reading. This patches fixes
this.
Signed-off-by: default avatarLi Wang <liwang@ubuntukylin.com>
Signed-off-by: default avatarSage Weil <sage@inktank.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent be541ecb
...@@ -213,9 +213,13 @@ static int readpage_nounlock(struct file *filp, struct page *page) ...@@ -213,9 +213,13 @@ static int readpage_nounlock(struct file *filp, struct page *page)
if (err < 0) { if (err < 0) {
SetPageError(page); SetPageError(page);
goto out; goto out;
} else if (err < PAGE_CACHE_SIZE) { } else {
if (err < PAGE_CACHE_SIZE) {
/* zero fill remainder of page */ /* zero fill remainder of page */
zero_user_segment(page, err, PAGE_CACHE_SIZE); zero_user_segment(page, err, PAGE_CACHE_SIZE);
} else {
flush_dcache_page(page);
}
} }
SetPageUptodate(page); SetPageUptodate(page);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment