• Zhang Yi's avatar
    ext4: optimize the EXT4_GET_BLOCKS_DELALLOC_RESERVE flag set · 8b825288
    Zhang Yi authored
    When doing block allocation, magic EXT4_GET_BLOCKS_DELALLOC_RESERVE
    means the allocating range covers a range of delayed allocated clusters,
    the blocks and quotas have already been reserved in ext4_da_map_blocks(),
    we should update the reserved space and don't need to claim them again.
    
    At the moment, we only set this magic in mpage_map_one_extent() when
    allocating a range of delayed allocated clusters in the write back path,
    it makes things complicated since we have to notice and deal with the
    case of allocating non-delayed allocated clusters separately in
    ext4_ext_map_blocks(). For example, it we fallocate some blocks that
    have been delayed allocated, free space would be claimed again in
    ext4_mb_new_blocks() (this is wrong exactily), and we can't claim quota
    space again, we have to release the quota reservations made for that
    previously delayed allocated clusters.
    
    Move the position thats set the EXT4_GET_BLOCKS_DELALLOC_RESERVE to
    where we actually do block allocation, it could simplify above handling
    a lot, it means that we always set this magic once the allocation range
    covers delalloc blocks, no need to take care of the allocation path.
    Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240813123452.2824659-3-yi.zhang@huaweicloud.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    8b825288
inode.c 180 KB