• Mark Fasheh's avatar
    btrfs: Don't BUG_ON kzalloc error in btrfs_lookup_csums_range() · 0678b618
    Mark Fasheh authored
    Unfortunately it isn't enough to just exit here - the kzalloc() happens in a
    loop and the allocated items are added to a linked list whose head is passed
    in from the caller.
    
    To fix the BUG_ON() and also provide the semantic that the list passed in is
    only modified on success, I create function-local temporary list that we add
    items too. If no error is met, that list is spliced to the callers at the
    end of the function. Otherwise the list will be walked and all items freed
    before the error value is returned.
    
    I did a simple test on this patch by forcing an error at the kzalloc() point
    and verifying that when this hits (git clone seemed to exercise this), the
    function throws the proper error. Unfortunately but predictably, we later
    hit a BUG_ON(ret) type line that still hasn't been fixed up ;)
    Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
    0678b618
file-item.c 22.5 KB