Skip to content

Commit

Permalink
Update ZFS_IOC offsets for FreeBSD
Browse files Browse the repository at this point in the history
Signed-off-by: Matt Macy <[email protected]>
  • Loading branch information
mattmacy committed Dec 5, 2019
1 parent 12395c7 commit b071969
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
25 changes: 13 additions & 12 deletions include/sys/fs/zfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1190,9 +1190,13 @@ typedef enum {
*/
typedef enum zfs_ioc {
/*
* illumos - 81/128 numbers reserved.
* Core features - 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 */
Expand Down Expand Up @@ -1280,18 +1284,15 @@ typedef enum zfs_ioc {
ZFS_IOC_WAIT, /* 0x5a53 */

/*
* Linux - 3/64 numbers reserved.
* Per-platform (Optional) - 6/128 numbers reserved.
*/
ZFS_IOC_LINUX = ('Z' << 8) + 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_PLATFORM = ZFS_IOC_FIRST + 0x80,
ZFS_IOC_EVENTS_NEXT, /* 0x81 (Linux) */
ZFS_IOC_EVENTS_CLEAR, /* 0x82 (Linux) */
ZFS_IOC_EVENTS_SEEK, /* 0x83 (Linux) */
ZFS_IOC_NEXTBOOT, /* 0x84 (FreeBSD) */
ZFS_IOC_JAIL, /* 0x85 (FreeBSD) */
ZFS_IOC_UNJAIL, /* 0x86 (FreeBSD) */
ZFS_IOC_LAST
} zfs_ioc_t;

Expand Down
28 changes: 20 additions & 8 deletions tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <string.h>
#include <strings.h>
#include <libzfs_core.h>
#include <libzutil.h>

#include <sys/nvpair.h>
#include <sys/zfs_ioctl.h>
Expand Down Expand Up @@ -100,9 +101,15 @@ static unsigned ioc_skip[] = {
ZFS_IOC_POOL_REGUID,
ZFS_IOC_SEND_PROGRESS,

/* Linux specific ioctls */
ZFS_IOC_EVENTS_NEXT,
ZFS_IOC_EVENTS_CLEAR,
ZFS_IOC_EVENTS_SEEK,

/* FreeBSD specific ioctls */
ZFS_IOC_NEXTBOOT,
ZFS_IOC_JAIL,
ZFS_IOC_UNJAIL,
};


Expand Down Expand Up @@ -154,7 +161,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) {
Expand Down Expand Up @@ -685,7 +692,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);
}
Expand Down Expand Up @@ -858,7 +865,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);
Expand All @@ -867,9 +874,11 @@ zfs_ioc_input_tests(const char *pool)
}

enum zfs_ioc_ref {
#ifdef __FreeBSD__
ZFS_IOC_BASE = 0,
#else
ZFS_IOC_BASE = ('Z' << 8),
LINUX_IOC_BASE = ZFS_IOC_BASE + 0x80,
FREEBSD_IOC_BASE = ZFS_IOC_BASE + 0xC0,
#endif
};

/*
Expand Down Expand Up @@ -972,9 +981,12 @@ validate_ioc_values(void)
CHECK(ZFS_IOC_BASE + 81 == ZFS_IOC_REDACT);
CHECK(ZFS_IOC_BASE + 82 == ZFS_IOC_GET_BOOKMARK_PROPS);
CHECK(ZFS_IOC_BASE + 83 == ZFS_IOC_WAIT);
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(ZFS_IOC_PLATFORM + 1 == ZFS_IOC_EVENTS_NEXT);
CHECK(ZFS_IOC_PLATFORM + 2 == ZFS_IOC_EVENTS_CLEAR);
CHECK(ZFS_IOC_PLATFORM + 3 == ZFS_IOC_EVENTS_SEEK);
CHECK(ZFS_IOC_PLATFORM + 4 == ZFS_IOC_NEXTBOOT);
CHECK(ZFS_IOC_PLATFORM + 5 == ZFS_IOC_JAIL);
CHECK(ZFS_IOC_PLATFORM + 6 == ZFS_IOC_UNJAIL);

#undef CHECK

Expand Down

0 comments on commit b071969

Please sign in to comment.