• Lukas Czerner's avatar
    ext4: Transfer initialized block to right neighbor if possible · bc2d9db4
    Lukas Czerner authored
    Currently when converting extent to initialized we attempt to transfer
    initialized block to the left neighbour if possible when certain
    criteria are met. However we do not attempt to do the same for the
    right neighbor.
    
    This commit adds the possibility to transfer initialized block to the
    right neighbour if:
    
    1. We're not converting the whole extent
    2. Both extents are stored in the same extent tree node
    3. Right neighbor is initialized
    4. Right neighbor is logically abutting the current one
    5. Right neighbor is physically abutting the current one
    6. Right neighbor would not overflow the length limit
    
    This is basically the same logic as with transferring to the left. This
    will gain us some performance benefits since it is faster than inserting
    extent and then merging it.
    
    It would also prevent some situation in delalloc patch when we might run
    out of metadata reservation. This is due to the fact that we would
    attempt to split the extent first (possibly allocating new metadata
    block) even though we did not counted for that because it can (and will)
    be merged again. This commit fix that scenario, because we no longer
    need to split the extent in such case.
    Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
    bc2d9db4
extents.c 129 KB