• Qu Wenruo's avatar
    btrfs: delayed-inode: Kill the BUG_ON() in btrfs_delete_delayed_dir_index() · 933c22a7
    Qu Wenruo authored
    There is one report of fuzzed image which leads to BUG_ON() in
    btrfs_delete_delayed_dir_index().
    
    Although that fuzzed image can already be addressed by enhanced
    extent-tree error handler, it's still better to hunt down more BUG_ON().
    
    This patch will hunt down two BUG_ON()s in
    btrfs_delete_delayed_dir_index():
    - One for error from btrfs_delayed_item_reserve_metadata()
      Instead of BUG_ON(), we output an error message and free the item.
      And return the error.
      All callers of this function handles the error by aborting current
      trasaction.
    
    - One for possible EEXIST from __btrfs_add_delayed_deletion_item()
      That function can return -EEXIST.
      We already have a good enough error message for that, only need to
      clean up the reserved metadata space and allocated item.
    
    To help above cleanup, also modifiy __btrfs_remove_delayed_item() called
    in btrfs_release_delayed_item(), to skip unassociated item.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=203253Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    933c22a7
delayed-inode.c 51.1 KB