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) {
|
||||
SetPageError(page);
|
||||
goto out;
|
||||
} else if (err < PAGE_CACHE_SIZE) {
|
||||
} else {
|
||||
if (err < PAGE_CACHE_SIZE) {
|
||||
/* 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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue