Re: [PATCH] Ceph: Avoid data inconsistency due to d-cache aliasing in readpage()
Hi Yan, zero_user_segment() has invoked flush_dcache_page() for us, we donnot wanna flush d-cache twice. Cheers, Li Wang On 11/13/2013 09:19 PM, Yan, Zheng wrote: On Wed, Nov 13, 2013 at 3:22 PM, Li Wang wrote: 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 --- fs/ceph/addr.c |8 ++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 6df8bd4..7ba 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -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); + } this doesn't make sense for me. why not call flush_dcache_page unconditionally? Regards Yan, Zheng } SetPageUptodate(page); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Ceph: Avoid data inconsistency due to d-cache aliasing in readpage()
On Wed, Nov 13, 2013 at 3:22 PM, Li Wang wrote: > 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 > --- > fs/ceph/addr.c |8 ++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c > index 6df8bd4..7ba 100644 > --- a/fs/ceph/addr.c > +++ b/fs/ceph/addr.c > @@ -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); > + } this doesn't make sense for me. why not call flush_dcache_page unconditionally? Regards Yan, Zheng > } > SetPageUptodate(page); > > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] 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 --- fs/ceph/addr.c |8 ++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 6df8bd4..7ba 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -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); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/