diff --git a/usr.sbin/makefs/zfs.c b/usr.sbin/makefs/zfs.c index 08689a55887..ab6011046b2 100644 --- a/usr.sbin/makefs/zfs.c +++ b/usr.sbin/makefs/zfs.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -69,7 +70,13 @@ struct dnode_cursor { void zfs_prep_opts(fsinfo_t *fsopts) { - zfs_opt_t *zfs = ecalloc(1, sizeof(*zfs)); + size_t align; + + align = alignof(uint64_t); + zfs_opt_t *zfs = aligned_alloc(align, roundup2(sizeof(*zfs), align)); + if (zfs == NULL) + err(1, "aligned_alloc"); + memset(zfs, 0, sizeof(*zfs)); const option_t zfs_options[] = { { '\0', "bootfs", &zfs->bootfs, OPT_STRPTR, diff --git a/usr.sbin/makefs/zfs/zfs.h b/usr.sbin/makefs/zfs/zfs.h index b92e2c03566..7ad3151dd8a 100644 --- a/usr.sbin/makefs/zfs/zfs.h +++ b/usr.sbin/makefs/zfs/zfs.h @@ -35,6 +35,7 @@ #include #include +#include #include #include "makefs.h" @@ -65,10 +66,13 @@ struct dataset_desc { }; typedef struct { - bool nowarn; + /* + * Block buffer, needs to be aligned for various on-disk structures, + * ZAPs, etc.. + */ + char filebuf[MAXBLOCKSIZE] __aligned(alignof(uint64_t)); - /* I/O buffer, just for convenience. */ - char filebuf[MAXBLOCKSIZE]; + bool nowarn; /* Pool parameters. */ const char *poolname;