From 22c8c33a588d08a58b4808bbc69c32123fd72a6d Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Fri, 17 Nov 2023 16:28:32 -0500 Subject: [PATCH] Use abd_zero_off() where applicable In several places abd_zero() cleaned ABD filled at the next line. Reviewed-by: Brian Behlendorf Signed-off-by: Alexander Motin Sponsored by: iXsystems, Inc. Closes #15514 --- module/os/freebsd/zfs/vdev_label_os.c | 2 +- module/zfs/mmp.c | 3 ++- module/zfs/vdev_label.c | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) 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,