diff options
author | наб <[email protected]> | 2022-04-07 04:37:16 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2022-04-13 11:37:10 -0700 |
commit | 74e4bfbcff3636182b76a18d6d08efd3ad0ad165 (patch) | |
tree | c2dba94cc1c4b6553d5a3d6f34c1e41a7f60d007 /lib/libzfs | |
parent | a4e0cee1780cbd8f2cb9a263a0ed8d91dbe68b4a (diff) |
libzfs: import: zpool_clear_label: don't allocate another time for L2ARC header
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Ahelenia Ziemiańska <[email protected]>
Closes #13304
Diffstat (limited to 'lib/libzfs')
-rw-r--r-- | lib/libzfs/libzfs_import.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/lib/libzfs/libzfs_import.c b/lib/libzfs/libzfs_import.c index aeb131d5d..806ab4e23 100644 --- a/lib/libzfs/libzfs_import.c +++ b/lib/libzfs/libzfs_import.c @@ -137,7 +137,6 @@ zpool_clear_label(int fd) struct stat64 statbuf; int l; vdev_label_t *label; - l2arc_dev_hdr_phys_t *l2dhdr = NULL; uint64_t size; int labels_cleared = 0; boolean_t clear_l2arc_header = B_FALSE, header_cleared = B_FALSE; @@ -150,11 +149,6 @@ zpool_clear_label(int fd) if ((label = calloc(1, sizeof (vdev_label_t))) == NULL) return (-1); - if ((l2dhdr = calloc(1, sizeof (l2arc_dev_hdr_phys_t))) == NULL) { - free(label); - return (-1); - } - for (l = 0; l < VDEV_LABELS; l++) { uint64_t state, guid, l2cache; nvlist_t *config; @@ -209,14 +203,16 @@ zpool_clear_label(int fd) } } - /* Clear the L2ARC header. */ - if (clear_l2arc_header && - pwrite64(fd, l2dhdr, sizeof (l2arc_dev_hdr_phys_t), - VDEV_LABEL_START_SIZE) == sizeof (l2arc_dev_hdr_phys_t)) + if (clear_l2arc_header) { + _Static_assert(sizeof (*label) >= sizeof (l2arc_dev_hdr_phys_t), + "label < l2arc_dev_hdr_phys_t"); + memset(label, 0, sizeof (l2arc_dev_hdr_phys_t)); + if (pwrite64(fd, label, sizeof (l2arc_dev_hdr_phys_t), + VDEV_LABEL_START_SIZE) == sizeof (l2arc_dev_hdr_phys_t)) header_cleared = B_TRUE; + } free(label); - free(l2dhdr); if (labels_cleared == 0) return (-1); |