> On Mar 19, 2024, at 5:25 AM, Srivathsa Dara <srivathsa.d.dara@xxxxxxxxxx> wrote: > > On March 16, 2024 3:02 AM, Andreas Dilger <adilger@xxxxxxxxx> wrote: >> >> On Mar 14, 2024, at 3:31 AM, Srivathsa Dara <srivathsa.d.dara@xxxxxxxxxx> wrote: >>> >>> According to the mke2fs man page, the supported cluster-size values >>> for an ext4 filesystem are 2048 to 256M bytes. However, this is not >>> the case. >>> >>> When mkfs is run to create a filesystem with following specifications: >>> * 1k blocksize and cluster-size greater than 32M >>> * 2k blocksize and cluster-size greater than 64M >>> * 4k blocksize and cluster-size greater than 128M mkfs fails with >>> "Invalid argument passed to ext2 library while trying to create >>> journal" error. In general, when the cluster-size to blocksize ratio >>> is greater than 32k, mkfs fails with this error. >>> >>> Went through the code and found out that the function >>> `ext2fs_new_range()` is the source of this error. This is because when >>> the cluster-size to blocksize ratio exceeds 32k, the length argument >>> to the function `ext2fs_new_range()` results in 0. Hence, the error. >>> >>> This patch corrects the valid cluster-size values. >>> --- >>> misc/mke2fs.8.in | 6 +++--- >>> 1 file changed, 3 insertions(+), 3 deletions(-) >>> >>> diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in index >>> e6bfc6d6..b5b02144 100644 >>> --- a/misc/mke2fs.8.in >>> +++ b/misc/mke2fs.8.in >>> @@ -230,9 +230,9 @@ test is used instead of a fast read-only test. >>> .TP >>> .B \-C " cluster-size" >>> Specify the size of cluster in bytes for filesystems using the >>> bigalloc -feature. Valid cluster-size values are from 2048 to 256M >>> bytes per -cluster. This can only be specified if the bigalloc >>> feature is -enabled. (See the >>> +feature. Valid cluster-size values are from 2048 to 128M bytes per >>> +cluster based on filesystem blocksize. This can only be specified if >>> +the bigalloc feature is enabled. (See the >>> .B ext4 (5) >> >> >> This is an improvement, but doesn't really explain the details of the limits. >> Instead of "based on filesystem blocksize." I think writing "between 2-32768 >> times the filesystem blocksize." or similar would be more clear and explain >> how the actual limits relate to the blocksize. > > Hi, Andreas. Thank you for the comment. Here are the details: Thank you for this added information, but I guess my comment wasn't very clear. *I* understand the background here. My email was directed at your change to the *man page*, where users who *do not* know the details go for information. > The function ext2fs_new_range() is causing the error. This function gets > called while creating the journal inode. > > Failure cases: > ------------------------------------------ > A | B | C | D | E | F | len > ------------------------------------------ > 1k 64m 0 16 16 65535 0 > 1k 128m 0 17 17 131071 0 > 1k 256m 0 18 18 262143 0 > 2k 128m 1 17 16 65535 0 > 2k 256m 1 18 17 131071 0 > 4k 256m 2 18 16 65535 0 > > successful cases: > > 1k 32m 0 15 15 32767 32768 > 2k 64m 1 16 15 32767 32768 > 4k 128m 2 17 15 32767 32768 Basically, what I was asking is that your patch for the man page be updated to include just a fraction of this information, specifically that it includes that "the cluster size must be between 2-32768 times the filesystem blocksize" and not just "based on the filesystem blocksize". Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP