diff options
author | Matthew Ahrens <[email protected]> | 2019-06-20 18:30:40 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-06-20 18:30:40 -0700 |
commit | accd6d9dc411b150d5313b2e777381f13da8861b (patch) | |
tree | 2dff66e30537355c434ef4daf6965a9fc63ac14b | |
parent | a64f8276c7c2e121f438866d2f91ddff22031e7f (diff) |
dedup=verify doesn't clear the blkptr's dedup flag
The logic to handle strong checksum collisions where the data doesn't
match is incorrect. It is not clearing the dedup bit of the blkptr,
which can cause a panic later in zio_ddt_free() due to the dedup table
not matching what is in the blkptr.
Reviewed-by: Tom Caputi <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Matthew Ahrens <[email protected]>
External-issue: DLPX-48097
Closes #8936
-rw-r--r-- | module/zfs/zio.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/module/zfs/zio.c b/module/zfs/zio.c index e36a7893d..b2f722eb2 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -3155,7 +3155,9 @@ zio_ddt_write(zio_t *zio) BP_ZERO(bp); } else { zp->zp_dedup = B_FALSE; + BP_SET_DEDUP(bp, B_FALSE); } + ASSERT(!BP_GET_DEDUP(bp)); zio->io_pipeline = ZIO_WRITE_PIPELINE; ddt_exit(ddt); return (zio); |