svn commit: r298472 - in head: cddl/contrib/opensolaris/lib/libzfs/common cddl/contrib/opensolaris/lib/libzfs_core/common sys/cddl/contrib/opensolaris/uts/common/sys/fs
Andriy Gapon
avg at FreeBSD.org
Fri Apr 22 13:00:29 UTC 2016
Author: avg
Date: Fri Apr 22 13:00:27 2016
New Revision: 298472
URL: https://svnweb.freebsd.org/changeset/base/298472
Log:
MFV r298471: 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>
MFC after: 2 weeks
Sponsored by: ClusterHQ
Modified:
head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h
head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
Directory Properties:
head/cddl/contrib/opensolaris/ (props changed)
head/cddl/contrib/opensolaris/lib/libzfs/ (props changed)
head/sys/cddl/contrib/opensolaris/ (props changed)
Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Fri Apr 22 12:51:55 2016 (r298471)
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Fri Apr 22 13:00:27 2016 (r298472)
@@ -3226,7 +3226,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);
@@ -3253,9 +3253,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: head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Fri Apr 22 12:51:55 2016 (r298471)
+++ head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c Fri Apr 22 13:00:27 2016 (r298472)
@@ -218,11 +218,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: head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Fri Apr 22 12:51:55 2016 (r298471)
+++ head/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h Fri Apr 22 13:00:27 2016 (r298472)
@@ -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 **);
Modified: head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h Fri Apr 22 12:51:55 2016 (r298471)
+++ head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h Fri Apr 22 13:00:27 2016 (r298472)
@@ -57,6 +57,10 @@ typedef enum {
ZFS_TYPE_BOOKMARK = (1 << 4)
} zfs_type_t;
+/*
+ * NB: lzc_dataset_type should be updated whenever a new objset type is added,
+ * if it represents a real type of a dataset that can be created from userland.
+ */
typedef enum dmu_objset_type {
DMU_OST_NONE,
DMU_OST_META,
More information about the svn-src-head
mailing list