svn commit: r298471 - vendor-sys/illumos/dist/uts/common/sys/fs vendor/illumos/dist/lib/libzfs/common vendor/illumos/dist/lib/libzfs_core/common

Andriy Gapon avg at FreeBSD.org
Fri Apr 22 12:51:57 UTC 2016


Author: avg
Date: Fri Apr 22 12:51:55 2016
New Revision: 298471
URL: https://svnweb.freebsd.org/changeset/base/298471

Log:
  6052 decouple lzc_create() from the implementation details
  
  illumos/illumos-gate at 26455f9efcf9b1e44937d4d86d1ce37b006f25a9
  https://github.com/illumos/illumos-gate/commit/26455f9efcf9b1e44937d4d86d1ce37b006f25a9
  
  https://www.illumos.org/issues/6052
    At the moment type parameter of lzc_create() is of dmu_objset_type_t type.
    That exposes an implementation detail and requires sys/fs/zfs.h to be included
    in libzfs_core.h creating unnecessary coupling between libzfs_core interface
    and ZFS internals.
    I think that dmu_objset_type_t should be replaced with a libzfs_core
    enumeration of supported dataset types.
    For ABI reasons the new enumeration could be bit-compatible with
    dmu_objset_type_t.
    For example:
        typedef enum {
            LZC_DST_ZFS = 2,
            LZC_DST_ZVOL
        } lzc_dataset_type_t;
  
  Reviewed by: Matthew Ahrens <mahrens at delphix.com>
  Approved by: Richard Lowe <richlowe at richlowe.net>
  Author: Andriy Gapon <andriy.gapon at clusterhq.com>

Modified:
  vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
  vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.c
  vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.h

Changes in other areas also in this revision:
Modified:
  vendor-sys/illumos/dist/uts/common/sys/fs/zfs.h

Modified: vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c	Fri Apr 22 12:49:00 2016	(r298470)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c	Fri Apr 22 12:51:55 2016	(r298471)
@@ -3152,7 +3152,7 @@ zfs_create(libzfs_handle_t *hdl, const c
 	uint64_t blocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE);
 	char errbuf[1024];
 	uint64_t zoned;
-	dmu_objset_type_t ost;
+	enum lzc_dataset_type ost;
 
 	(void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
 	    "cannot create '%s'"), path);
@@ -3179,9 +3179,9 @@ zfs_create(libzfs_handle_t *hdl, const c
 	}
 
 	if (type == ZFS_TYPE_VOLUME)
-		ost = DMU_OST_ZVOL;
+		ost = LZC_DATSET_TYPE_ZVOL;
 	else
-		ost = DMU_OST_ZFS;
+		ost = LZC_DATSET_TYPE_ZFS;
 
 	/* open zpool handle for prop validation */
 	char pool_path[MAXNAMELEN];

Modified: vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.c	Fri Apr 22 12:49:00 2016	(r298470)
+++ vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.c	Fri Apr 22 12:51:55 2016	(r298471)
@@ -171,11 +171,11 @@ out:
 }
 
 int
-lzc_create(const char *fsname, dmu_objset_type_t type, nvlist_t *props)
+lzc_create(const char *fsname, enum lzc_dataset_type type, nvlist_t *props)
 {
 	int error;
 	nvlist_t *args = fnvlist_alloc();
-	fnvlist_add_int32(args, "type", type);
+	fnvlist_add_int32(args, "type", (dmu_objset_type_t)type);
 	if (props != NULL)
 		fnvlist_add_nvlist(args, "props", props);
 	error = lzc_ioctl(ZFS_IOC_CREATE, fsname, args, NULL);

Modified: vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.h
==============================================================================
--- vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.h	Fri Apr 22 12:49:00 2016	(r298470)
+++ vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.h	Fri Apr 22 12:51:55 2016	(r298471)
@@ -30,7 +30,6 @@
 #include <libnvpair.h>
 #include <sys/param.h>
 #include <sys/types.h>
-#include <sys/fs/zfs.h>
 
 #ifdef	__cplusplus
 extern "C" {
@@ -39,8 +38,16 @@ extern "C" {
 int libzfs_core_init(void);
 void libzfs_core_fini(void);
 
+/*
+ * NB: this type should be kept binary compatible with dmu_objset_type_t.
+ */
+enum lzc_dataset_type {
+	LZC_DATSET_TYPE_ZFS = 2,
+	LZC_DATSET_TYPE_ZVOL
+};
+
 int lzc_snapshot(nvlist_t *, nvlist_t *, nvlist_t **);
-int lzc_create(const char *, dmu_objset_type_t, nvlist_t *);
+int lzc_create(const char *, enum lzc_dataset_type, nvlist_t *);
 int lzc_clone(const char *, const char *, nvlist_t *);
 int lzc_destroy_snaps(nvlist_t *, boolean_t, nvlist_t **);
 int lzc_bookmark(nvlist_t *, nvlist_t **);


More information about the svn-src-all mailing list