HomeFreeBSD

Fix panic in dsl_process_sub_livelist for EINTR

Description

Fix panic in dsl_process_sub_livelist for EINTR

Issue

Recently we hit an assertion panic in dsl_process_sub_livelist while
exporting the spa and interrupting bpobj_iterate_nofree. In that case
bpobj_iterate_nofree stops mid-way returning an EINTR without clearing
the intermediate AVL tree that keeps track of the livelist entries it
has encountered so far. At that point the code has a VERIFY for the
number of elements of the AVL expecting it to be zero (which is not the
case for EINTR).

Fix

Cleanup any intermediate state before destroying the AVL when
encountering EINTR. Also added a comment documenting the scenario where
the EINTR comes up. There is no need to do anything else for the calles
of dsl_process_sub_livelist as they already handle the EINTR case.

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #13939

Details

Provenance
Serapheim Dimitropoulos <serapheim@delphix.com>Authored on Sep 29 2022, 4:39 PM
GitHub <noreply@github.com>Committed on Sep 29 2022, 4:39 PM
Parents
rG1b87195c3c06: Fix unchecked return values
Branches
Unknown
Tags
Unknown

Event Timeline

GitHub <noreply@github.com> committed rG4acc36ed7c5c: Fix panic in dsl_process_sub_livelist for EINTR (authored by Serapheim Dimitropoulos <serapheim@delphix.com>).Sep 29 2022, 4:39 PM