2011-10-30 13:34:46

by Yongqiang Yang

[permalink] [raw]
Subject: [PATCH 1/3] ext4: move variables to its scope


Signed-off-by: Yongqiang Yang <[email protected]>
---
fs/ext4/inode.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index e4b26fa..3c4a9d5 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3182,7 +3182,6 @@ int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,
ext4_fsblk_t index = from >> PAGE_CACHE_SHIFT;
unsigned int offset = from & (PAGE_CACHE_SIZE-1);
unsigned int blocksize, max, pos;
- unsigned int end_of_block, range_to_discard;
ext4_lblk_t iblock;
struct buffer_head *bh;
int err = 0;
@@ -3234,6 +3233,8 @@ int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,

pos = offset;
while (pos < offset + length) {
+ unsigned int end_of_block, range_to_discard;
+
err = 0;

/* The length of space left to zero and unmap */
--
1.7.5.1



2011-10-30 13:34:50

by Yongqiang Yang

[permalink] [raw]
Subject: [PATCH 3/3] ext4: let ext4_discard_partial_buffers handle unaligned range correctly

As comment says, we should handle unaligned range rather than aligned
one.

Signed-off-by: Yongqiang Yang <[email protected]>
---
fs/ext4/inode.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index e113de8..f97d671 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3209,8 +3209,8 @@ int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,
* to be updated with the contents of the block before
* we write the zeros on top of it.
*/
- if (!(from & (blocksize - 1)) ||
- !((from + length) & (blocksize - 1))) {
+ if ((from & (blocksize - 1)) ||
+ ((from + length) & (blocksize - 1))) {
create_empty_buffers(page, blocksize, 0);
} else {
/*
--
1.7.5.1


2011-10-30 13:34:48

by Yongqiang Yang

[permalink] [raw]
Subject: [PATCH 2/3] ext4: return ENOMEM if find_or_create_pages fails


Signed-off-by: Yongqiang Yang <[email protected]>
---
fs/ext4/inode.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 3c4a9d5..e113de8 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3132,7 +3132,7 @@ int ext4_discard_partial_page_buffers(handle_t *handle,
page = find_or_create_page(mapping, from >> PAGE_CACHE_SHIFT,
mapping_gfp_mask(mapping) & ~__GFP_FS);
if (!page)
- return -EINVAL;
+ return -ENOMEM;

err = ext4_discard_partial_page_buffers_no_lock(handle, inode, page,
from, length, flags);
@@ -3375,7 +3375,7 @@ int ext4_block_zero_page_range(handle_t *handle,
page = find_or_create_page(mapping, from >> PAGE_CACHE_SHIFT,
mapping_gfp_mask(mapping) & ~__GFP_FS);
if (!page)
- return -EINVAL;
+ return -ENOMEM;

blocksize = inode->i_sb->s_blocksize;
max = blocksize - (offset & (blocksize - 1));
--
1.7.5.1


2011-10-30 13:36:13

by Yongqiang Yang

[permalink] [raw]
Subject: Re: [PATCH 3/3] ext4: let ext4_discard_partial_buffers handle unaligned range correctly

Forgot to say that the bug was found by running xfstests 91.

Thx!

Yongqiang.

On Sun, Oct 30, 2011 at 7:30 PM, Yongqiang Yang <[email protected]> wrote:
> As comment says, we should handle unaligned range rather than aligned
> one.
>
> Signed-off-by: Yongqiang Yang <[email protected]>
> ---
> ?fs/ext4/inode.c | ? ?4 ++--
> ?1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index e113de8..f97d671 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -3209,8 +3209,8 @@ int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,
> ? ? ? ? ? ? ? ? * to be updated with the contents of the block before
> ? ? ? ? ? ? ? ? * we write the zeros on top of it.
> ? ? ? ? ? ? ? ? */
> - ? ? ? ? ? ? ? if (!(from & (blocksize - 1)) ||
> - ? ? ? ? ? ? ? ? ? !((from + length) & (blocksize - 1))) {
> + ? ? ? ? ? ? ? if ((from & (blocksize - 1)) ||
> + ? ? ? ? ? ? ? ? ? ((from + length) & (blocksize - 1))) {
> ? ? ? ? ? ? ? ? ? ? ? ?create_empty_buffers(page, blocksize, 0);
> ? ? ? ? ? ? ? ?} else {
> ? ? ? ? ? ? ? ? ? ? ? ?/*
> --
> 1.7.5.1
>
>



--
Best Wishes
Yongqiang Yang

2011-10-30 13:51:14

by Coly Li

[permalink] [raw]
Subject: Re: [PATCH 1/3] ext4: move variables to its scope

On 2011年10月30日 19:30, Yongqiang Yang Wrote:
> Signed-off-by: Yongqiang Yang <[email protected]>
> ---
> fs/ext4/inode.c | 3 ++-
[snip]

Yongqiang,

Could you please to add any commit log to this patch set ? That could be much helpful then only one line SOB :-)

Thanks.

--
Coly Li

2011-10-31 22:12:14

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 2/3] ext4: return ENOMEM if find_or_create_pages fails

On Sun, Oct 30, 2011 at 07:30:02PM +0800, Yongqiang Yang wrote:
>
> Signed-off-by: Yongqiang Yang <[email protected]>

Thanks, applied.

- Ted

2011-10-31 22:12:06

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 1/3] ext4: move variables to its scope

On Sun, Oct 30, 2011 at 07:30:01PM +0800, Yongqiang Yang wrote:
>
> Signed-off-by: Yongqiang Yang <[email protected]>

Thanks, applied.

- Ted

2011-10-31 22:12:27

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 3/3] ext4: let ext4_discard_partial_buffers handle unaligned range correctly

On Sun, Oct 30, 2011 at 07:30:03PM +0800, Yongqiang Yang wrote:
> As comment says, we should handle unaligned range rather than aligned
> one.
>
> Signed-off-by: Yongqiang Yang <[email protected]>

Thanks, applied.

- Ted