• Filipe Manana's avatar
    btrfs: remove not needed mod_start and mod_len from struct extent_map · 2e438442
    Filipe Manana authored
    The mod_start and mod_len fields of struct extent_map were introduced by
    commit 4e2f84e6 ("Btrfs: improve fsync by filtering extents that we
    want") in order to avoid too low performance when fsyncing a file that
    keeps getting extent maps merge, because it resulted in each fsync logging
    again csum ranges that were already merged before.
    
    We don't need this anymore as extent maps in the list of modified extents
    are never merged with other extent maps and once we log an extent map we
    remove it from the list of modified extent maps, so it's never logged
    twice.
    
    So remove the mod_start and mod_len fields from struct extent_map and use
    instead the start and len fields when logging checksums in the fast fsync
    path. This also makes EXTENT_FLAG_FILLING unused so remove it as well.
    
    Running the reproducer from the commit mentioned before, with a larger
    number of extents and against a null block device, so that IO is fast
    and we can better see any impact from searching checksums items and
    logging them, gave the following results from dd:
    
    Before this change:
    
       409600000 bytes (410 MB, 391 MiB) copied, 22.948 s, 17.8 MB/s
    
    After this change:
    
       409600000 bytes (410 MB, 391 MiB) copied, 22.9997 s, 17.8 MB/s
    
    So no changes in throughput.
    The test was done in a release kernel (non-debug, Debian's default kernel
    config) and its steps are the following:
    
       $ mkfs.btrfs -f /dev/nullb0
       $ mount /dev/sdb /mnt
       $ dd if=/dev/zero of=/mnt/foobar bs=4k count=100000 oflag=sync
       $ umount /mnt
    
    This also reduces the size of struct extent_map from 128 bytes down to 112
    bytes, so now we can have 36 extents maps per 4K page instead of 32.
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    2e438442
extent_map.c 27 KB