• Jan Kara's avatar
    ext4: fix warning in ext4_da_update_reserve_space() · 7d734532
    Jan Kara authored
    reaim workfile.dbase test easily triggers warning in
    ext4_da_update_reserve_space():
    
    EXT4-fs warning (device ram0): ext4_da_update_reserve_space:365:
    ino 12, allocated 1 with only 0 reserved metadata blocks (releasing 1
    blocks with reserved 9 data blocks)
    
    The problem is that (one of) tests creates file and then randomly writes
    to it with O_SYNC. That results in writing back pages of the file in
    random order so we create extents for written blocks say 0, 2, 4, 6, 8
    - this last allocation also allocates new block for extents. Then we
    writeout block 1 so we have extents 0-2, 4, 6, 8 and we release
    indirect extent block because extents fit in the inode again. Then we
    writeout block 10 and we need to allocate indirect extent block again
    which triggers the warning because we don't have the reservation
    anymore.
    
    Fix the problem by giving back freed metadata blocks resulting from
    extent merging into inode's reservation pool.
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    7d734532
mballoc.c 142 KB