diff mbox series

[v2,04/24] ext4: make ext4_punch_hole() support large block size

Message ID 20251107144249.435029-5-libaokun@huaweicloud.com
State Superseded
Headers show
Series ext4: enable block size larger than page size | expand

Commit Message

Baokun Li Nov. 7, 2025, 2:42 p.m. UTC
From: Baokun Li <libaokun1@huawei.com>

When preparing for bs > ps support, clean up unnecessary PAGE_SIZE
references in ext4_punch_hole().

Previously, when a hole extended beyond i_size, we aligned the hole end
upwards to PAGE_SIZE to handle partial folio invalidation. Now that
truncate_inode_pages_range() already handles partial folio invalidation
correctly, this alignment is no longer required.

However, to save pointless tail block zeroing, we still keep rounding up
to the block size here.

In addition, as Honza pointed out, when the hole end equals i_size, it
should also be rounded up to the block size. This patch fixes that as well.

Suggested-by: Jan Kara <jack@suse.cz>
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
---
 fs/ext4/inode.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Jan Kara Nov. 10, 2025, 9:35 a.m. UTC | #1
On Fri 07-11-25 22:42:29, libaokun@huaweicloud.com wrote:
> From: Baokun Li <libaokun1@huawei.com>
> 
> When preparing for bs > ps support, clean up unnecessary PAGE_SIZE
> references in ext4_punch_hole().
> 
> Previously, when a hole extended beyond i_size, we aligned the hole end
> upwards to PAGE_SIZE to handle partial folio invalidation. Now that
> truncate_inode_pages_range() already handles partial folio invalidation
> correctly, this alignment is no longer required.
> 
> However, to save pointless tail block zeroing, we still keep rounding up
> to the block size here.
> 
> In addition, as Honza pointed out, when the hole end equals i_size, it
> should also be rounded up to the block size. This patch fixes that as well.
> 
> Suggested-by: Jan Kara <jack@suse.cz>
> Signed-off-by: Baokun Li <libaokun1@huawei.com>
> Reviewed-by: Zhang Yi <yi.zhang@huawei.com>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  fs/ext4/inode.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index f7ca48729738..6fec3aa2268a 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -4406,10 +4406,10 @@ int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
>  
>  	/*
>  	 * If the hole extends beyond i_size, set the hole to end after
> -	 * the page that contains i_size.
> +	 * the block that contains i_size to save pointless tail block zeroing.
>  	 */
> -	if (end > inode->i_size)
> -		end = round_up(inode->i_size, PAGE_SIZE);
> +	if (end >= inode->i_size)
> +		end = round_up(inode->i_size, sb->s_blocksize);
>  	if (end > max_end)
>  		end = max_end;
>  	length = end - offset;
> -- 
> 2.46.1
>
diff mbox series

Patch

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index f7ca48729738..6fec3aa2268a 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4406,10 +4406,10 @@  int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
 
 	/*
 	 * If the hole extends beyond i_size, set the hole to end after
-	 * the page that contains i_size.
+	 * the block that contains i_size to save pointless tail block zeroing.
 	 */
-	if (end > inode->i_size)
-		end = round_up(inode->i_size, PAGE_SIZE);
+	if (end >= inode->i_size)
+		end = round_up(inode->i_size, sb->s_blocksize);
 	if (end > max_end)
 		end = max_end;
 	length = end - offset;