The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * Copyright 2014 Xin Li <delphij@FreeBSD.org>.  All rights reserved.
   23  * Copyright 2013 Martin Matuska <mm@FreeBSD.org>.  All rights reserved.
   24  * Use is subject to license terms.
   25  */
   26 
   27 #ifndef _SYS_ZFS_IOCTL_COMPAT_H
   28 #define _SYS_ZFS_IOCTL_COMPAT_H
   29 
   30 #include <sys/cred.h>
   31 #include <sys/dmu.h>
   32 #include <sys/zio.h>
   33 #include <sys/dsl_deleg.h>
   34 #include <sys/zfs_ioctl.h>
   35 
   36 #ifdef _KERNEL
   37 #include <sys/nvpair.h>
   38 #endif  /* _KERNEL */
   39 
   40 /*
   41  * Legacy ioctl support allows compatibility with pre-OpenZFS tools on
   42  * FreeBSD.  The need for it will eventually pass (perhaps after FreeBSD
   43  * 12 is well out of support), at which point this code can be removed.
   44  * For now, downstream consumers may choose to disable this code by
   45  * removing the following define.
   46  */
   47 #define ZFS_LEGACY_SUPPORT
   48 
   49 #ifdef  __cplusplus
   50 extern "C" {
   51 #endif
   52 
   53 /*
   54  * Backwards ioctl compatibility
   55  */
   56 
   57 /* ioctl versions for vfs.zfs.version.ioctl */
   58 #define ZFS_IOCVER_UNDEF        -1
   59 #define ZFS_IOCVER_NONE         0
   60 #define ZFS_IOCVER_DEADMAN      1
   61 #define ZFS_IOCVER_LZC          2
   62 #define ZFS_IOCVER_ZCMD         3
   63 #define ZFS_IOCVER_EDBP         4
   64 #define ZFS_IOCVER_RESUME       5
   65 #define ZFS_IOCVER_INLANES      6
   66 #define ZFS_IOCVER_PAD          7
   67 #define ZFS_IOCVER_LEGACY       ZFS_IOCVER_PAD
   68 #define ZFS_IOCVER_OZFS         15
   69 
   70 /* compatibility conversion flag */
   71 #define ZFS_CMD_COMPAT_NONE     0
   72 #define ZFS_CMD_COMPAT_V15      1
   73 #define ZFS_CMD_COMPAT_V28      2
   74 #define ZFS_CMD_COMPAT_DEADMAN  3
   75 #define ZFS_CMD_COMPAT_LZC      4
   76 #define ZFS_CMD_COMPAT_ZCMD     5
   77 #define ZFS_CMD_COMPAT_EDBP     6
   78 #define ZFS_CMD_COMPAT_RESUME   7
   79 #define ZFS_CMD_COMPAT_INLANES  8
   80 #define ZFS_CMD_COMPAT_LEGACY   9
   81 
   82 #define ZFS_IOC_COMPAT_PASS     254
   83 #define ZFS_IOC_COMPAT_FAIL     255
   84 
   85 #define ZFS_IOCREQ(ioreq)       ((ioreq) & 0xff)
   86 
   87 typedef struct zfs_iocparm {
   88         uint32_t        zfs_ioctl_version;
   89         uint64_t        zfs_cmd;
   90         uint64_t        zfs_cmd_size;
   91 } zfs_iocparm_t;
   92 
   93 
   94 #ifdef ZFS_LEGACY_SUPPORT
   95 #define LEGACY_MAXPATHLEN 1024
   96 #define LEGACY_MAXNAMELEN 256
   97 
   98 /*
   99  * Note: this struct must have the same layout in 32-bit and 64-bit, so
  100  * that 32-bit processes (like /sbin/zfs) can pass it to the 64-bit
  101  * kernel.  Therefore, we add padding to it so that no "hidden" padding
  102  * is automatically added on 64-bit (but not on 32-bit).
  103  */
  104 typedef struct zfs_cmd_legacy {
  105         char            zc_name[LEGACY_MAXPATHLEN];     /* pool|dataset name */
  106         uint64_t        zc_nvlist_src;          /* really (char *) */
  107         uint64_t        zc_nvlist_src_size;
  108         uint64_t        zc_nvlist_dst;          /* really (char *) */
  109         uint64_t        zc_nvlist_dst_size;
  110         boolean_t       zc_nvlist_dst_filled;   /* put an nvlist in dst? */
  111         int             zc_pad2;
  112 
  113         /*
  114          * The following members are for legacy ioctls which haven't been
  115          * converted to the new method.
  116          */
  117         uint64_t        zc_history;             /* really (char *) */
  118         char            zc_value[LEGACY_MAXPATHLEN * 2];
  119         char            zc_string[LEGACY_MAXNAMELEN];
  120         uint64_t        zc_guid;
  121         uint64_t        zc_nvlist_conf;         /* really (char *) */
  122         uint64_t        zc_nvlist_conf_size;
  123         uint64_t        zc_cookie;
  124         uint64_t        zc_objset_type;
  125         uint64_t        zc_perm_action;
  126         uint64_t        zc_history_len;
  127         uint64_t        zc_history_offset;
  128         uint64_t        zc_obj;
  129         uint64_t        zc_iflags;              /* internal to zfs(7fs) */
  130         zfs_share_t     zc_share;
  131         uint64_t        zc_jailid;
  132         dmu_objset_stats_t zc_objset_stats;
  133         dmu_replay_record_t zc_begin_record;
  134         zinject_record_t zc_inject_record;
  135         uint32_t        zc_defer_destroy;
  136         uint32_t        zc_flags;
  137         uint64_t        zc_action_handle;
  138         int             zc_cleanup_fd;
  139         uint8_t         zc_simple;
  140         uint8_t         zc_pad3[3];
  141         boolean_t       zc_resumable;
  142         uint32_t        zc_pad4;
  143         uint64_t        zc_sendobj;
  144         uint64_t        zc_fromobj;
  145         uint64_t        zc_createtxg;
  146         zfs_stat_t      zc_stat;
  147 } zfs_cmd_legacy_t;
  148 #endif
  149 
  150 
  151 #ifdef _KERNEL
  152 int zfs_ioctl_compat_pre(zfs_cmd_t *, int *, const int);
  153 void zfs_ioctl_compat_post(zfs_cmd_t *, const int, const int);
  154 nvlist_t *zfs_ioctl_compat_innvl(zfs_cmd_t *, nvlist_t *, const int,
  155     const int);
  156 nvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int,
  157     const int);
  158 #endif  /* _KERNEL */
  159 #ifdef ZFS_LEGACY_SUPPORT
  160 int zfs_ioctl_legacy_to_ozfs(int request);
  161 int zfs_ioctl_ozfs_to_legacy(int request);
  162 void zfs_cmd_legacy_to_ozfs(zfs_cmd_legacy_t *src, zfs_cmd_t *dst);
  163 void zfs_cmd_ozfs_to_legacy(zfs_cmd_t *src, zfs_cmd_legacy_t *dst);
  164 #endif
  165 
  166 void zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int, const int);
  167 
  168 #ifdef  __cplusplus
  169 }
  170 #endif
  171 
  172 #endif  /* _SYS_ZFS_IOCTL_COMPAT_H */

Cache object: 7f1de19b738a00e7a1c229b51ff93f9c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.