diff --git a/module/os/freebsd/zfs/vdev_label_os.c b/module/os/freebsd/zfs/vdev_label_os.c index 338982ff68..79732d9173 100644 --- a/module/os/freebsd/zfs/vdev_label_os.c +++ b/module/os/freebsd/zfs/vdev_label_os.c @@ -55,8 +55,8 @@ vdev_label_write_pad2(vdev_t *vd, const char *buf, size_t size) ASSERT3U(spa_config_held(spa, SCL_ALL, RW_WRITER), ==, SCL_ALL); pad2 = abd_alloc_for_io(VDEV_PAD_SIZE, B_TRUE); - abd_zero(pad2, VDEV_PAD_SIZE); abd_copy_from_buf(pad2, buf, size); + abd_zero_off(pad2, size, VDEV_PAD_SIZE - size); retry: zio = zio_root(spa, NULL, NULL, flags); diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c index 25eea07529..66bc0ae60b 100644 --- a/module/zfs/mmp.c +++ b/module/zfs/mmp.c @@ -517,8 +517,9 @@ mmp_write_uberblock(spa_t *spa) zio_t *zio = zio_null(mmp->mmp_zio_root, spa, NULL, NULL, NULL, flags); abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); - abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); abd_copy_from_buf(ub_abd, ub, sizeof (uberblock_t)); + abd_zero_off(ub_abd, sizeof (uberblock_t), + VDEV_UBERBLOCK_SIZE(vd) - sizeof (uberblock_t)); mmp->mmp_seq++; mmp->mmp_kstat_id++; diff --git a/module/zfs/vdev_label.c b/module/zfs/vdev_label.c index e8f562a1a6..4c6501cc9a 100644 --- a/module/zfs/vdev_label.c +++ b/module/zfs/vdev_label.c @@ -1187,8 +1187,9 @@ vdev_label_init(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason) * Initialize uberblock template. */ ub_abd = abd_alloc_linear(VDEV_UBERBLOCK_RING, B_TRUE); - abd_zero(ub_abd, VDEV_UBERBLOCK_RING); abd_copy_from_buf(ub_abd, &spa->spa_uberblock, sizeof (uberblock_t)); + abd_zero_off(ub_abd, sizeof (uberblock_t), + VDEV_UBERBLOCK_RING - sizeof (uberblock_t)); ub = abd_to_buf(ub_abd); ub->ub_txg = 0; @@ -1767,8 +1768,9 @@ vdev_uberblock_sync(zio_t *zio, uint64_t *good_writes, /* Copy the uberblock_t into the ABD */ abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); - abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); abd_copy_from_buf(ub_abd, ub, sizeof (uberblock_t)); + abd_zero_off(ub_abd, sizeof (uberblock_t), + VDEV_UBERBLOCK_SIZE(vd) - sizeof (uberblock_t)); for (int l = 0; l < VDEV_LABELS; l++) vdev_label_write(zio, vd, l, ub_abd,