aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tests
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2022-11-01 16:15:37 +0000
committerDavid Sterba <dsterba@suse.com>2022-11-02 17:43:25 +0100
commit5614dc3a47e3310fbc77ea3b67eaadd1c6417bf1 (patch)
tree4b4c57b26365dddd5987dafbddd9fb543323299f /fs/btrfs/tests
parentbtrfs: fix lost file sync on direct IO write with nowait and dsync iocb (diff)
downloadlinux-dev-5614dc3a47e3310fbc77ea3b67eaadd1c6417bf1.tar.xz
linux-dev-5614dc3a47e3310fbc77ea3b67eaadd1c6417bf1.zip
btrfs: fix inode list leak during backref walking at resolve_indirect_refs()
During backref walking, at resolve_indirect_refs(), if we get an error we jump to the 'out' label and call ulist_free() on the 'parents' ulist, which frees all the elements in the ulist - however that does not free any inode lists that may be attached to elements, through the 'aux' field of a ulist node, so we end up leaking lists if we have any attached to the unodes. Fix this by calling free_leaf_list() instead of ulist_free() when we exit from resolve_indirect_refs(). The static function free_leaf_list() is moved up for this to be possible and it's slightly simplified by removing unnecessary code. Fixes: 3301958b7c1d ("Btrfs: add inodes before dropping the extent lock in find_all_leafs") Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/tests')
0 files changed, 0 insertions, 0 deletions