Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Livelist logic should handle dedup blkptrs #12177

Merged
merged 1 commit into from Jun 7, 2021

Conversation

sdimitro
Copy link
Contributor

@sdimitro sdimitro commented Jun 1, 2021

= Problem

When the livelist logic was designed it didn't take into
account that when dedup is enabled the sublivelists can
have consecutive FREE entries for the same block without
an ALLOC entry for it in-between them. This caused panics
in systems that were deleting/condesing clones where dedup
is enabled.

= This patch

Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensured that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

= Testing

After I reproduced the issue with a shell script, I added
a variant of that shell script to ZTS. After ensuring that
this new test panics the system the same way as the original
reproducer I tried it against the updated logic in this
patch and verified that the system no longer panics.

= Side Fixes

  • zdb -y no longer panics when encountering double frees

Signed-off-by: Serapheim Dimitropoulos serapheim@delphix.com
Closes #11480

module/zfs/dsl_deadlist.c Show resolved Hide resolved
module/zfs/dsl_deadlist.c Show resolved Hide resolved
module/zfs/dsl_deadlist.c Outdated Show resolved Hide resolved
module/zfs/dsl_deadlist.c Show resolved Hide resolved
@ghost ghost changed the title Livelist logic should hande dedup blkptrs Livelist logic should handle dedup blkptrs Jun 1, 2021
= Problem

When the livelist logic was designed it didn't take into
account that when dedup is enabled the sublivelists can
have consecutive FREE entries for the same block without
an ALLOC entry for it in-between them. This caused panics
in systems that were deleting/condesing clones where dedup
is enabled.

= This patch

Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensured that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

= Testing

After I reproduced the issue with a shell script, I added
a variant of that shell script to ZTS. After ensuring that
this new test panics the system the same way as the original
reproducer I tried it against the updated logic in this
patch and verified that the system no longer panics.

= Side Fixes

* zdb -y no longer panics when encountering double frees

Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
@behlendorf behlendorf added the Status: Code Review Needed Ready for review and testing label Jun 2, 2021
@ahrens ahrens requested review from jwk404 and grwilson June 4, 2021 15:50
@mmaybee mmaybee added Status: Accepted Ready to integrate (reviewed, tested) and removed Status: Code Review Needed Ready for review and testing labels Jun 7, 2021
@mmaybee mmaybee merged commit 86b5f4c into openzfs:master Jun 7, 2021
behlendorf pushed a commit to behlendorf/zfs that referenced this pull request Jun 8, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
behlendorf pushed a commit to behlendorf/zfs that referenced this pull request Jun 8, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
behlendorf pushed a commit to behlendorf/zfs that referenced this pull request Jun 9, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
tle211212 pushed a commit to tle211212/zfs that referenced this pull request Aug 7, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
@behlendorf behlendorf added this to To do in 2.1-release Aug 18, 2021
@behlendorf behlendorf moved this from To do to Done in 2.1-release Aug 23, 2021
tonyhutter pushed a commit to tonyhutter/zfs that referenced this pull request Sep 13, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
tonyhutter pushed a commit that referenced this pull request Sep 21, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #11480
Closes #12177
tonyhutter pushed a commit that referenced this pull request Sep 22, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #11480
Closes #12177
ghost pushed a commit to truenas/zfs that referenced this pull request Oct 7, 2021
Update the logic to handle the dedup-case of consecutive
FREEs in the livelist code. The logic still ensures that
all the FREE entries are matched up with a respective
ALLOC by keeping a refcount for each FREE blkptr that we
encounter and ensuring that this refcount gets to zero
by the time we are done processing the livelist.

zdb -y no longer panics when encountering double frees

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Don Brady <don.brady@delphix.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes openzfs#11480
Closes openzfs#12177
@behlendorf behlendorf removed this from Done in 2.1-release Dec 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Accepted Ready to integrate (reviewed, tested)
Projects
2.0-release
Awaiting triage
Development

Successfully merging this pull request may close these issues.

ZFS Kernel Panic at boot on Arch Linux
6 participants