mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
freebsd: add ifdefs around legacy ioctl support
Require that ZFS_LEGACY_SUPPORT be defined for legacy ioctl support to be built. For now, define it in zfs_ioctl_compat.h so support is always built. This will allow systems that need never support pre-openzfs tools a mechanism to remove support at build time. This code should be removed once the need for tool compatability is gone. No functional change at this time. Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Brooks Davis <brooks.davis@sri.com> Closes #14127
This commit is contained in:
committed by
Brian Behlendorf
parent
6c89cffc2c
commit
20b867f5f7
@@ -46,8 +46,11 @@ get_zfs_ioctl_version(void)
|
||||
static int
|
||||
zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag)
|
||||
{
|
||||
int newrequest, ret;
|
||||
int ret;
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
int newrequest;
|
||||
void *zc_c = NULL;
|
||||
#endif
|
||||
unsigned long ncmd;
|
||||
zfs_iocparm_t zp;
|
||||
|
||||
@@ -58,6 +61,7 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag)
|
||||
zp.zfs_cmd_size = sizeof (zfs_cmd_t);
|
||||
zp.zfs_ioctl_version = ZFS_IOCVER_OZFS;
|
||||
break;
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
case ZFS_CMD_COMPAT_LEGACY:
|
||||
newrequest = zfs_ioctl_ozfs_to_legacy(request);
|
||||
ncmd = _IOWR('Z', newrequest, zfs_iocparm_t);
|
||||
@@ -67,6 +71,7 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag)
|
||||
zp.zfs_cmd_size = sizeof (zfs_cmd_legacy_t);
|
||||
zp.zfs_ioctl_version = ZFS_IOCVER_LEGACY;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
abort();
|
||||
return (EINVAL);
|
||||
@@ -74,14 +79,18 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag)
|
||||
|
||||
ret = ioctl(fd, ncmd, &zp);
|
||||
if (ret) {
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
if (zc_c)
|
||||
free(zc_c);
|
||||
#endif
|
||||
return (ret);
|
||||
}
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
if (zc_c) {
|
||||
zfs_cmd_legacy_to_ozfs(zc_c, zc);
|
||||
free(zc_c);
|
||||
}
|
||||
#endif
|
||||
return (ret);
|
||||
}
|
||||
|
||||
@@ -100,9 +109,11 @@ lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc)
|
||||
zfs_ioctl_version = get_zfs_ioctl_version();
|
||||
|
||||
switch (zfs_ioctl_version) {
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
case ZFS_IOCVER_LEGACY:
|
||||
cflag = ZFS_CMD_COMPAT_LEGACY;
|
||||
break;
|
||||
#endif
|
||||
case ZFS_IOCVER_OZFS:
|
||||
cflag = ZFS_CMD_COMPAT_NONE;
|
||||
break;
|
||||
|
||||
@@ -261,7 +261,9 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive)
|
||||
(void) unused, (void) guid;
|
||||
zfs_iocparm_t zp;
|
||||
zfs_cmd_t *zc = NULL;
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
zfs_cmd_legacy_t *zcl = NULL;
|
||||
#endif
|
||||
unsigned long request;
|
||||
int ret;
|
||||
|
||||
@@ -296,6 +298,7 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive)
|
||||
umem_free(zc, sizeof (zfs_cmd_t));
|
||||
|
||||
break;
|
||||
#ifdef ZFS_LEGACY_SUPPORT
|
||||
case ZFS_IOCVER_LEGACY:
|
||||
zcl = umem_zalloc(sizeof (zfs_cmd_legacy_t), UMEM_NOFAIL);
|
||||
|
||||
@@ -311,6 +314,7 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive)
|
||||
umem_free(zcl, sizeof (zfs_cmd_legacy_t));
|
||||
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
fprintf(stderr, "unrecognized zfs ioctl version %d", ver);
|
||||
exit(1);
|
||||
|
||||
Reference in New Issue
Block a user