[PATCH v3 24/24] ext4: enable block size larger than page size

libaokun@huaweicloud.com posted 24 patches 3 months ago
There is a newer version of this series
[PATCH v3 24/24] ext4: enable block size larger than page size
Posted by libaokun@huaweicloud.com 3 months ago
From: Baokun Li <libaokun1@huawei.com>

Since block device (See commit 3c20917120ce ("block/bdev: enable large
folio support for large logical block sizes")) and page cache (See commit
ab95d23bab220ef8 ("filemap: allocate mapping_min_order folios in the page
cache")) has the ability to have a minimum order when allocating folio,
and ext4 has supported large folio in commit 7ac67301e82f ("ext4: enable
large folio for regular file"), now add support for block_size > PAGE_SIZE
in ext4.

set_blocksize() -> bdev_validate_blocksize() already validates the block
size, so ext4_load_super() does not need to perform additional checks.
Here we only need to add the FS_LBS bit to fs_flags.

In addition, block sizes larger than the page size are currently supported
only when CONFIG_TRANSPARENT_HUGEPAGE is enabled. To make this explicit,
a blocksize_gt_pagesize entry has been added under /sys/fs/ext4/feature/,
indicating whether bs > ps is supported. This allows mke2fs to check the
interface and determine whether a warning should be issued when formatting
a filesystem with block size larger than the page size.

Suggested-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
---
 fs/ext4/super.c | 3 ++-
 fs/ext4/sysfs.c | 6 ++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index f1aeba47b0e3..29bc8f5eb527 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -7451,7 +7451,8 @@ static struct file_system_type ext4_fs_type = {
 	.init_fs_context	= ext4_init_fs_context,
 	.parameters		= ext4_param_specs,
 	.kill_sb		= ext4_kill_sb,
-	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME,
+	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME |
+				  FS_LBS,
 };
 MODULE_ALIAS_FS("ext4");
 
diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index 987bd00f916a..0018e09b867e 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -332,6 +332,9 @@ EXT4_ATTR_FEATURE(fast_commit);
 #if IS_ENABLED(CONFIG_UNICODE) && defined(CONFIG_FS_ENCRYPTION)
 EXT4_ATTR_FEATURE(encrypted_casefold);
 #endif
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
+EXT4_ATTR_FEATURE(blocksize_gt_pagesize);
+#endif
 
 static struct attribute *ext4_feat_attrs[] = {
 	ATTR_LIST(lazy_itable_init),
@@ -351,6 +354,9 @@ static struct attribute *ext4_feat_attrs[] = {
 	ATTR_LIST(fast_commit),
 #if IS_ENABLED(CONFIG_UNICODE) && defined(CONFIG_FS_ENCRYPTION)
 	ATTR_LIST(encrypted_casefold),
+#endif
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
+	ATTR_LIST(blocksize_gt_pagesize),
 #endif
 	NULL,
 };
-- 
2.46.1
Re: [PATCH v3 24/24] ext4: enable block size larger than page size
Posted by Pankaj Raghav 3 months ago
On 11/11/25 15:26, libaokun@huaweicloud.com wrote:
> From: Baokun Li <libaokun1@huawei.com>
> 
> Since block device (See commit 3c20917120ce ("block/bdev: enable large
> folio support for large logical block sizes")) and page cache (See commit
> ab95d23bab220ef8 ("filemap: allocate mapping_min_order folios in the page
> cache")) has the ability to have a minimum order when allocating folio,
> and ext4 has supported large folio in commit 7ac67301e82f ("ext4: enable
> large folio for regular file"), now add support for block_size > PAGE_SIZE
> in ext4.
> 
> set_blocksize() -> bdev_validate_blocksize() already validates the block
> size, so ext4_load_super() does not need to perform additional checks.
> Here we only need to add the FS_LBS bit to fs_flags.
> 
> In addition, block sizes larger than the page size are currently supported
> only when CONFIG_TRANSPARENT_HUGEPAGE is enabled. To make this explicit,
> a blocksize_gt_pagesize entry has been added under /sys/fs/ext4/feature/,
> indicating whether bs > ps is supported. This allows mke2fs to check the
> interface and determine whether a warning should be issued when formatting
> a filesystem with block size larger than the page size.
> 

If you are planning to send another revision, then it would be nice to include
the corresponding patch to mke2fs as well? I don't know how ext4 process works but
just a suggestion.
> Suggested-by: Theodore Ts'o <tytso@mit.edu>
> Signed-off-by: Baokun Li <libaokun1@huawei.com>
> Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
> Reviewed-by: Jan Kara <jack@suse.cz>
> ---

Looks good,
Reviewed-by: Pankaj Raghav <p.raghav@samsung.com>

>  fs/ext4/super.c | 3 ++-
>  fs/ext4/sysfs.c | 6 ++++++
>  2 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
> index f1aeba47b0e3..29bc8f5eb527 100644
> --- a/fs/ext4/super.c
> +++ b/fs/ext4/super.c
> @@ -7451,7 +7451,8 @@ static struct file_system_type ext4_fs_type = {
>  	.init_fs_context	= ext4_init_fs_context,
>  	.parameters		= ext4_param_specs,
>  	.kill_sb		= ext4_kill_sb,
> -	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME,
> +	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME |
> +				  FS_LBS,
>  };
>  MODULE_ALIAS_FS("ext4");
>  
> diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
> index 987bd00f916a..0018e09b867e 100644
> --- a/fs/ext4/sysfs.c
> +++ b/fs/ext4/sysfs.c
> @@ -332,6 +332,9 @@ EXT4_ATTR_FEATURE(fast_commit);
>  #if IS_ENABLED(CONFIG_UNICODE) && defined(CONFIG_FS_ENCRYPTION)
>  EXT4_ATTR_FEATURE(encrypted_casefold);
>  #endif
> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> +EXT4_ATTR_FEATURE(blocksize_gt_pagesize);
> +#endif
>  
>  static struct attribute *ext4_feat_attrs[] = {
>  	ATTR_LIST(lazy_itable_init),
> @@ -351,6 +354,9 @@ static struct attribute *ext4_feat_attrs[] = {
>  	ATTR_LIST(fast_commit),
>  #if IS_ENABLED(CONFIG_UNICODE) && defined(CONFIG_FS_ENCRYPTION)
>  	ATTR_LIST(encrypted_casefold),
> +#endif
> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> +	ATTR_LIST(blocksize_gt_pagesize),
>  #endif
>  	NULL,
>  };
Re: [PATCH v3 24/24] ext4: enable block size larger than page size
Posted by Theodore Ts'o 2 months, 4 weeks ago
On Tue, Nov 11, 2025 at 07:01:20PM +0100, Pankaj Raghav wrote:
> 
> If you are planning to send another revision, then it would be nice to include
> the corresponding patch to mke2fs as well? I don't know how ext4 process works but
> just a suggestion.

It's actually more convenient for me not to mix userspace and kernel
patches, because b4 doesn't know the difference.  For that matter
replying with an unrelated patch can also confuse b4, so it's a bit
easier for people using b4 to send unrelated patches as a separate
mail thread, using git format-patch / git send-email.

In this case, the corresponding patch to mke2fs is pretty simple, and
I've already pushed it to the e2fsprogs git repo:

   https://github.com/tytso/e2fsprogs/commit/6d9033ff854eb346746176f43aa063137275d4b1

:-)

Cheers,

					- Ted
Re: [PATCH v3 24/24] ext4: enable block size larger than page size
Posted by Baokun Li 2 months, 4 weeks ago
On 2025-11-12 05:11, Theodore Ts'o wrote:
> On Tue, Nov 11, 2025 at 07:01:20PM +0100, Pankaj Raghav wrote:
>> If you are planning to send another revision, then it would be nice to include
>> the corresponding patch to mke2fs as well? I don't know how ext4 process works but
>> just a suggestion.
> It's actually more convenient for me not to mix userspace and kernel
> patches, because b4 doesn't know the difference.  For that matter
> replying with an unrelated patch can also confuse b4, so it's a bit
> easier for people using b4 to send unrelated patches as a separate
> mail thread, using git format-patch / git send-email.
>
> In this case, the corresponding patch to mke2fs is pretty simple, and
> I've already pushed it to the e2fsprogs git repo:
>
>    https://github.com/tytso/e2fsprogs/commit/6d9033ff854eb346746176f43aa063137275d4b1
>
> :-)
>
> Cheers,
>
> 					- Ted

Thank you for the adaptation in mke2fs!


Cheers,
Baokun