2007-11-09 07:32:00

by Hugh Dickins

[permalink] [raw]
Subject: [PATCH mm] unionfs: clear partial read

unionfs_do_readpage forgot to clear the rest of the page when vfs_read
does not fill the page: fix that.

Signed-off-by: Hugh Dickins <[email protected]>
---

fs/unionfs/mmap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--- 2.6.24-rc1-mm1/fs/unionfs/mmap.c 2007-11-04 13:48:02.000000000 +0000
+++ linux/fs/unionfs/mmap.c 2007-11-06 13:51:02.000000000 +0000
@@ -176,7 +176,8 @@ static int unionfs_do_readpage(struct fi
err = vfs_read(lower_file, page_data, PAGE_CACHE_SIZE,
&lower_file->f_pos);
set_fs(old_fs);
-
+ if (err >= 0 && err < PAGE_CACHE_SIZE)
+ memset(page_data + err, 0, PAGE_CACHE_SIZE - err);
kunmap(page);

if (err < 0)


2007-11-09 15:26:46

by Erez Zadok

[permalink] [raw]
Subject: Re: [PATCH mm] unionfs: clear partial read

In message <[email protected]>, Hugh Dickins writes:
> unionfs_do_readpage forgot to clear the rest of the page when vfs_read
> does not fill the page: fix that.
>
> Signed-off-by: Hugh Dickins <[email protected]>
> ---
>
> fs/unionfs/mmap.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> --- 2.6.24-rc1-mm1/fs/unionfs/mmap.c 2007-11-04 13:48:02.000000000 +0000
> +++ linux/fs/unionfs/mmap.c 2007-11-06 13:51:02.000000000 +0000
> @@ -176,7 +176,8 @@ static int unionfs_do_readpage(struct fi
> err = vfs_read(lower_file, page_data, PAGE_CACHE_SIZE,
> &lower_file->f_pos);
> set_fs(old_fs);
> -
> + if (err >= 0 && err < PAGE_CACHE_SIZE)
> + memset(page_data + err, 0, PAGE_CACHE_SIZE - err);
> kunmap(page);
>
> if (err < 0)

Agreed.

Erez.