From: Matthew Ahrens Date: Fri, 21 Jun 2019 01:30:40 +0000 (-0700) Subject: dedup=verify doesn't clear the blkptr's dedup flag X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=accd6d9dc411b150d5313b2e777381f13da8861b;p=zfs 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 Reviewed-by: Brian Behlendorf Signed-off-by: Matthew Ahrens External-issue: DLPX-48097 Closes #8936 --- 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);