On Tue, Aug 05, 2025 at 02:00:31PM +0530, Ojaswin Mujoo wrote: > In some cases like small FSes with no meta_bg and where the resize doesn't > need extra gdt blocks as it can fit in the current one, > s_reserved_gdt_blocks is set as 0, which causes fsmap to emit a 0 length > entry, which is incorrect. > > $ mkfs.ext4 -b 65536 -O bigalloc /dev/sda 5G > $ mount /dev/sda /mnt/scratch > $ xfs_io -c "fsmap -d" /mnt/scartch > > 0: 253:48 [0..127]: static fs metadata 128 > 1: 253:48 [128..255]: special 102:1 128 > 2: 253:48 [256..255]: special 102:2 0 <---- 0 len entry > 3: 253:48 [256..383]: special 102:3 128 > > Fix this by adding a check for this case. > > Fixes: 0c9ec4beecac ("ext4: support GETFSMAP ioctls") > Signed-off-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx> I had no idea that this could be zero, so.... Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > fs/ext4/fsmap.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/fs/ext4/fsmap.c b/fs/ext4/fsmap.c > index 9d63c39f6077..91185c40f755 100644 > --- a/fs/ext4/fsmap.c > +++ b/fs/ext4/fsmap.c > @@ -393,6 +393,14 @@ static unsigned int ext4_getfsmap_find_sb(struct super_block *sb, > /* Reserved GDT blocks */ > if (!ext4_has_feature_meta_bg(sb) || metagroup < first_meta_bg) { > len = le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks); > + > + /* > + * mkfs.ext4 can set s_reserved_gdt_blocks as 0 in some cases, > + * check for that. > + */ > + if (!len) > + return 0; > + > error = ext4_getfsmap_fill(meta_list, fsb, len, > EXT4_FMR_OWN_RESV_GDT); > if (error) > -- > 2.49.0 > >