• Liu Bo's avatar
    Btrfs: fix regression in lock_delalloc_pages · 49d4a334
    Liu Bo authored
    The bug is a regression after commit
    (da2c7009 "btrfs: teach __process_pages_contig about PAGE_LOCK operation")
    and commit
    (76c0021d "Btrfs: use helper to simplify lock/unlock pages").
    
    So if the dirty pages which are under writeback got truncated partially
    before we lock the dirty pages, we couldn't find all pages mapping to the
    delalloc range, and the bug didn't return an error so it kept going on and
    found that the delalloc range got truncated and got to unlock the dirty
    pages, and then the ASSERT could caught the error, and showed
    
    -----------------------------------------------------------------------------
    assertion failed: page_ops & PAGE_LOCK, file: fs/btrfs/extent_io.c, line: 1716
    -----------------------------------------------------------------------------
    
    This fixes the bug by returning the proper -EAGAIN.
    
    Cc: David Sterba <dsterba@suse.com>
    Reported-by: default avatarDave Jones <davej@codemonkey.org.uk>
    Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    49d4a334
extent_io.c 149 KB