ceph: Avoid data inconsistency due to d-cache aliasing in readpage()
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: Li Wang <liwang@ubuntukylin.com> Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
parent
86b58d1313
commit
56f91aad69
|
@ -210,9 +210,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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue