From 3008812436deeb65c382f8d835a2d7c45f27dd6d Mon Sep 17 00:00:00 2001 From: Matt Macy Date: Mon, 2 Dec 2019 23:45:46 +0000 Subject: [PATCH] Update ZFS_IOC offsets for FreeBSD Signed-off-by: Matt Macy --- include/sys/fs/zfs.h | 13 +++++++++---- .../libzfs_input_check/libzfs_input_check.c | 18 +++++++++++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h index eeb45790349b..2c216f2c3bd4 100644 --- a/include/sys/fs/zfs.h +++ b/include/sys/fs/zfs.h @@ -1192,7 +1192,11 @@ typedef enum zfs_ioc { /* * illumos - 81/128 numbers reserved. */ +#ifdef __FreeBSD__ + ZFS_IOC_FIRST = 0, +#else ZFS_IOC_FIRST = ('Z' << 8), +#endif ZFS_IOC = ZFS_IOC_FIRST, ZFS_IOC_POOL_CREATE = ZFS_IOC_FIRST, /* 0x5a00 */ ZFS_IOC_POOL_DESTROY, /* 0x5a01 */ @@ -1282,16 +1286,17 @@ typedef enum zfs_ioc { /* * Linux - 3/64 numbers reserved. */ - ZFS_IOC_LINUX = ('Z' << 8) + 0x80, + ZFS_IOC_LINUX = ZFS_IOC_FIRST + 0x80, ZFS_IOC_EVENTS_NEXT, /* 0x5a81 */ ZFS_IOC_EVENTS_CLEAR, /* 0x5a82 */ ZFS_IOC_EVENTS_SEEK, /* 0x5a83 */ - /* * FreeBSD - 1/64 numbers reserved. */ - ZFS_IOC_FREEBSD = ('Z' << 8) + 0xC0, - + ZFS_IOC_FREEBSD = ZFS_IOC_FIRST + 0xc0, + ZFS_IOC_NEXTBOOT, /* 0xc1 */ + ZFS_IOC_JAIL, /* 0xc2 */ + ZFS_IOC_UNJAIL, /* 0xc3 */ ZFS_IOC_LAST } zfs_ioc_t; diff --git a/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c b/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c index f3392dc17f58..6f2688b8e81d 100644 --- a/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c +++ b/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -103,6 +104,10 @@ static unsigned ioc_skip[] = { ZFS_IOC_EVENTS_NEXT, ZFS_IOC_EVENTS_CLEAR, ZFS_IOC_EVENTS_SEEK, + + ZFS_IOC_NEXTBOOT, + ZFS_IOC_JAIL, + ZFS_IOC_UNJAIL, }; @@ -154,7 +159,7 @@ lzc_ioctl_run(zfs_ioc_t ioc, const char *name, nvlist_t *innvl, int expected) zc.zc_nvlist_dst_size = MAX(size * 2, 128 * 1024); zc.zc_nvlist_dst = (uint64_t)(uintptr_t)malloc(zc.zc_nvlist_dst_size); - if (ioctl(zfs_fd, ioc, &zc) != 0) + if (zfs_ioctl_fd(zfs_fd, ioc, &zc) != 0) error = errno; if (error != expected) { @@ -685,7 +690,7 @@ zfs_destroy(const char *dataset) (void) strlcpy(zc.zc_name, dataset, sizeof (zc.zc_name)); zc.zc_name[sizeof (zc.zc_name) - 1] = '\0'; - err = ioctl(zfs_fd, ZFS_IOC_DESTROY, &zc); + err = zfs_ioctl_fd(zfs_fd, ZFS_IOC_DESTROY, &zc); return (err == 0 ? 0 : errno); } @@ -858,7 +863,7 @@ zfs_ioc_input_tests(const char *pool) if (ioc_tested[cmd]) continue; - if (ioctl(zfs_fd, ioc, &zc) != 0 && + if (zfs_ioctl_fd(zfs_fd, ioc, &zc) != 0 && errno != ZFS_ERR_IOC_CMD_UNAVAIL) { (void) fprintf(stderr, "cmd %d is missing a test case " "(%d)\n", cmd, errno); @@ -867,7 +872,11 @@ zfs_ioc_input_tests(const char *pool) } enum zfs_ioc_ref { +#ifdef __FreeBSD__ + ZFS_IOC_BASE = 0, +#else ZFS_IOC_BASE = ('Z' << 8), +#endif LINUX_IOC_BASE = ZFS_IOC_BASE + 0x80, FREEBSD_IOC_BASE = ZFS_IOC_BASE + 0xC0, }; @@ -975,6 +984,9 @@ validate_ioc_values(void) CHECK(LINUX_IOC_BASE + 1 == ZFS_IOC_EVENTS_NEXT); CHECK(LINUX_IOC_BASE + 2 == ZFS_IOC_EVENTS_CLEAR); CHECK(LINUX_IOC_BASE + 3 == ZFS_IOC_EVENTS_SEEK); + CHECK(FREEBSD_IOC_BASE + 1 == ZFS_IOC_NEXTBOOT); + CHECK(FREEBSD_IOC_BASE + 2 == ZFS_IOC_JAIL); + CHECK(FREEBSD_IOC_BASE + 3 == ZFS_IOC_UNJAIL); #undef CHECK