• Bob Peterson's avatar
    GFS2: Fix non-recursive truncate bug · c4a9d189
    Bob Peterson authored
    Before this patch if you truncated a file to a smaller size it
    wasn't freeing all the blocks properly. There are two reasons.
    
    First, the metapath comparison was not comparing previous heights.
    I added a function, mp_eq_to_hgt, which checks the metapath at
    all heights prior to the target height.
    
    Second, in function find_nonnull_ptr, it needed to zero out all
    pointers for heights following the target height. Translated into
    decimal integer terms, this way a number like 299, when incremented,
    becomes 300, not 399. The 2 gets incremented to 3, and the following
    digits need to be reset.
    
    These two things allow the truncate state machine to properly find
    the blocks it needs to delete.
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    c4a9d189
bmap.c 45.3 KB