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 3, 2019
1 parent 5142032 commit 560ef72
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
12 changes: 9 additions & 3 deletions include/sys/fs/zfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -1282,16 +1286,18 @@ 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;

Expand Down
20 changes: 17 additions & 3 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,7 +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),
#endif
LINUX_IOC_BASE = ZFS_IOC_BASE + 0x80,
FREEBSD_IOC_BASE = ZFS_IOC_BASE + 0xC0,
};
Expand Down Expand Up @@ -975,6 +986,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

Expand Down

0 comments on commit 560ef72

Please sign in to comment.