Print this page
2882 implement libzfs_core
2883 changing "canmount" property to "on" should not always remount dataset
2900 "zfs snapshot" should be able to create multiple, arbitrary snapshots at once
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Chris Siden <christopher.siden@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Bill Pijewski <wdp@joyent.com>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>

@@ -18,10 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
 #ifndef _SYS_ZFS_IOCTL_H
 #define _SYS_ZFS_IOCTL_H
 

@@ -39,10 +40,19 @@
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
 /*
+ * The structures in this file are passed between userland and the
+ * kernel.  Userland may be running a 32-bit process, while the kernel
+ * is 64-bit.  Therefore, these structures need to compile the same in
+ * 32-bit and 64-bit.  This means not using type "long", and adding
+ * explicit padding so that the 32-bit structure will not be packed more
+ * tightly than the 64-bit structure (which requires 64-bit alignment).
+ */
+
+/*
  * Property values for snapdir
  */
 #define ZFS_SNAPDIR_HIDDEN              0
 #define ZFS_SNAPDIR_VISIBLE             1
 

@@ -254,25 +264,32 @@
         ZFS_CASE_INSENSITIVE,
         ZFS_CASE_MIXED
 } zfs_case_t;
 
 typedef struct zfs_cmd {
-        char            zc_name[MAXPATHLEN];
+        char            zc_name[MAXPATHLEN];    /* name of pool or dataset */
+        uint64_t        zc_nvlist_src;          /* really (char *) */
+        uint64_t        zc_nvlist_src_size;
+        uint64_t        zc_nvlist_dst;          /* really (char *) */
+        uint64_t        zc_nvlist_dst_size;
+        boolean_t       zc_nvlist_dst_filled;   /* put an nvlist in dst? */
+        int             zc_pad2;
+
+        /*
+         * The following members are for legacy ioctls which haven't been
+         * converted to the new method.
+         */
+        uint64_t        zc_history;             /* really (char *) */
         char            zc_value[MAXPATHLEN * 2];
         char            zc_string[MAXNAMELEN];
         char            zc_top_ds[MAXPATHLEN];
         uint64_t        zc_guid;
         uint64_t        zc_nvlist_conf;         /* really (char *) */
         uint64_t        zc_nvlist_conf_size;
-        uint64_t        zc_nvlist_src;          /* really (char *) */
-        uint64_t        zc_nvlist_src_size;
-        uint64_t        zc_nvlist_dst;          /* really (char *) */
-        uint64_t        zc_nvlist_dst_size;
         uint64_t        zc_cookie;
         uint64_t        zc_objset_type;
         uint64_t        zc_perm_action;
-        uint64_t        zc_history;             /* really (char *) */
         uint64_t        zc_history_len;
         uint64_t        zc_history_offset;
         uint64_t        zc_obj;
         uint64_t        zc_iflags;              /* internal to zfs(7fs) */
         zfs_share_t     zc_share;