Patchwork ext4: remove unneeded call to ext4_es_remove_extent in punch hole

login
register
mail settings
Submitter Ashish Sangwan
Date April 27, 2013, 4:30 a.m.
Message ID <1367037053-1893-1-git-send-email-ashish.sangwan2@gmail.com>
Download mbox | patch
Permalink /patch/240076/
State New
Headers show

Comments

Ashish Sangwan - April 27, 2013, 4:30 a.m.
From: Ashish Sangwan <a.sangwan@samsung.com>

During punch hole, before removing extents we make sure that the blocks
are commited to disk by calling filemap_write_and_wait_range. So, the
extents cannot be present on extent status tree.

Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
---
 fs/ext4/inode.c |    7 -------
 1 files changed, 0 insertions(+), 7 deletions(-)
Zheng Liu - April 27, 2013, 5:28 a.m.
On Sat, Apr 27, 2013 at 10:00:53AM +0530, Ashish Sangwan wrote:
> From: Ashish Sangwan <a.sangwan@samsung.com>
> 
> During punch hole, before removing extents we make sure that the blocks
> are commited to disk by calling filemap_write_and_wait_range. So, the
> extents cannot be present on extent status tree.
> 
> Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>

Hi Ashish,

I guess that this patch is against mainline kernel, right?  The commit
log is right before we use extent status tree to track all extent
information.  In dev branch of ext4 tree, we track all extent status in
status tree.  So we need to remove extent from status tree in punch
hole.

Thanks,
                                                - Zheng

> ---
>  fs/ext4/inode.c |    7 -------
>  1 files changed, 0 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 50cced9..944eb15 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -3749,13 +3749,6 @@ int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
>  	down_write(&EXT4_I(inode)->i_data_sem);
>  	ext4_discard_preallocations(inode);
>  
> -	ret = ext4_es_remove_extent(inode, first_block,
> -				    stop_block - first_block);
> -	if (ret) {
> -		up_write(&EXT4_I(inode)->i_data_sem);
> -		goto out_stop;
> -	}
> -
>  	if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
>  		ret = ext4_ext_remove_space(inode, first_block,
>  					    stop_block - 1);
> -- 
> 1.7.8.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ashish Sangwan - April 27, 2013, 6:50 a.m.
On Sat, Apr 27, 2013 at 10:58 AM, Zheng Liu <gnehzuil.liu@gmail.com> wrote:
> On Sat, Apr 27, 2013 at 10:00:53AM +0530, Ashish Sangwan wrote:
>> From: Ashish Sangwan <a.sangwan@samsung.com>
>>
>> During punch hole, before removing extents we make sure that the blocks
>> are commited to disk by calling filemap_write_and_wait_range. So, the
>> extents cannot be present on extent status tree.
>>
>> Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
>> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
>
> Hi Ashish,
>
> I guess that this patch is against mainline kernel, right?
True

>The commit
> log is right before we use extent status tree to track all extent
> information.  In dev branch of ext4 tree, we track all extent status in
> status tree.  So we need to remove extent from status tree in punch
> hole.
I was of the opinion that filemap_write_and_wait_range will remove the
extent from status tree if its still there.
ok, I will check the dev branch.

Thanks,
Ashish
>
> Thanks,
>                                                 - Zheng
>
>> ---
>>  fs/ext4/inode.c |    7 -------
>>  1 files changed, 0 insertions(+), 7 deletions(-)
>>
>> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
>> index 50cced9..944eb15 100644
>> --- a/fs/ext4/inode.c
>> +++ b/fs/ext4/inode.c
>> @@ -3749,13 +3749,6 @@ int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
>>       down_write(&EXT4_I(inode)->i_data_sem);
>>       ext4_discard_preallocations(inode);
>>
>> -     ret = ext4_es_remove_extent(inode, first_block,
>> -                                 stop_block - first_block);
>> -     if (ret) {
>> -             up_write(&EXT4_I(inode)->i_data_sem);
>> -             goto out_stop;
>> -     }
>> -
>>       if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
>>               ret = ext4_ext_remove_space(inode, first_block,
>>                                           stop_block - 1);
>> --
>> 1.7.8.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Zheng Liu - April 27, 2013, 7:11 a.m.
On Sat, Apr 27, 2013 at 12:20:22PM +0530, Ashish Sangwan wrote:
> >The commit
> > log is right before we use extent status tree to track all extent
> > information.  In dev branch of ext4 tree, we track all extent status in
> > status tree.  So we need to remove extent from status tree in punch
> > hole.
> I was of the opinion that filemap_write_and_wait_range will remove the
> extent from status tree if its still there.
> ok, I will check the dev branch.

Ah, please bear with me.  In mainline kernel 3.9-rcX, we have used
status tree to track all extent status.  You could also check 3.9-rcX
kernel.  Please let me know if I miss something.

Thanks,
                                                - Zheng
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ashish Sangwan - April 29, 2013, 8:40 a.m.
On Sat, Apr 27, 2013 at 12:41 PM, Zheng Liu <gnehzuil.liu@gmail.com> wrote:
> On Sat, Apr 27, 2013 at 12:20:22PM +0530, Ashish Sangwan wrote:
>> >The commit
>> > log is right before we use extent status tree to track all extent
>> > information.  In dev branch of ext4 tree, we track all extent status in
>> > status tree.  So we need to remove extent from status tree in punch
>> > hole.
>> I was of the opinion that filemap_write_and_wait_range will remove the
>> extent from status tree if its still there.
>> ok, I will check the dev branch.
>
> Ah, please bear with me.  In mainline kernel 3.9-rcX, we have used
> status tree to track all extent status.  You could also check 3.9-rcX
> kernel.  Please let me know if I miss something.
Hi Zheng,

Ok, I understood your point.
Currently, after step 2 of extent status tree, it houses _all_ the
extents and not just delayed extents.
This patch is not required now.

Regards,
Ashish
>
> Thanks,
>                                                 - Zheng
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 50cced9..944eb15 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3749,13 +3749,6 @@  int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
 	down_write(&EXT4_I(inode)->i_data_sem);
 	ext4_discard_preallocations(inode);
 
-	ret = ext4_es_remove_extent(inode, first_block,
-				    stop_block - first_block);
-	if (ret) {
-		up_write(&EXT4_I(inode)->i_data_sem);
-		goto out_stop;
-	}
-
 	if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
 		ret = ext4_ext_remove_space(inode, first_block,
 					    stop_block - 1);