Re: [PATCH] Ceph: Avoid data inconsistency due to d-cache aliasing in readpage()

2013-11-13 Thread Li Wang

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()

2013-11-13 Thread Yan, Zheng
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()

2013-11-12 Thread Li Wang
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/