• Hou Tao's avatar
    ext4: limit the number of blocks in one ADD_RANGE TLV · a2c2f082
    Hou Tao authored
    Now EXT4_FC_TAG_ADD_RANGE uses ext4_extent to track the
    newly-added blocks, but the limit on the max value of
    ee_len field is ignored, and it can lead to BUG_ON as
    shown below when running command "fallocate -l 128M file"
    on a fast_commit-enabled fs:
    
      kernel BUG at fs/ext4/ext4_extents.h:199!
      invalid opcode: 0000 [#1] SMP PTI
      CPU: 3 PID: 624 Comm: fallocate Not tainted 5.14.0-rc6+ #1
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
      RIP: 0010:ext4_fc_write_inode_data+0x1f3/0x200
      Call Trace:
       ? ext4_fc_write_inode+0xf2/0x150
       ext4_fc_commit+0x93b/0xa00
       ? ext4_fallocate+0x1ad/0x10d0
       ext4_sync_file+0x157/0x340
       ? ext4_sync_file+0x157/0x340
       vfs_fsync_range+0x49/0x80
       do_fsync+0x3d/0x70
       __x64_sys_fsync+0x14/0x20
       do_syscall_64+0x3b/0xc0
       entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Simply fixing it by limiting the number of blocks
    in one EXT4_FC_TAG_ADD_RANGE TLV.
    
    Fixes: aa75f4d3 ("ext4: main fast-commit commit path")
    Cc: stable@kernel.org
    Signed-off-by: default avatarHou Tao <houtao1@huawei.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Link: https://lore.kernel.org/r/20210820044505.474318-1-houtao1@huawei.com
    a2c2f082
fast_commit.c 61.4 KB