mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-12 03:00:52 +03:00
OpenZFS 6052 - decouple lzc_create() from the implementation details
Authored by: Andriy Gapon <andriy.gapon@clusterhq.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Richard Lowe <richlowe@richlowe.net> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Ported-by: George Melikov mail@gmelikov.ru OpenZFS-issue: https://www.illumos.org/issues/6052 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/26455f9 Closes #5622
This commit is contained in:
parent
f85c06bedf
commit
e67a7ffb5d
@ -38,8 +38,16 @@ extern "C" {
|
|||||||
int libzfs_core_init(void);
|
int libzfs_core_init(void);
|
||||||
void libzfs_core_fini(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_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_clone(const char *, const char *, nvlist_t *);
|
||||||
int lzc_destroy_snaps(nvlist_t *, boolean_t, nvlist_t **);
|
int lzc_destroy_snaps(nvlist_t *, boolean_t, nvlist_t **);
|
||||||
int lzc_bookmark(nvlist_t *, nvlist_t **);
|
int lzc_bookmark(nvlist_t *, nvlist_t **);
|
||||||
|
@ -54,6 +54,10 @@ typedef enum {
|
|||||||
ZFS_TYPE_BOOKMARK = (1 << 4)
|
ZFS_TYPE_BOOKMARK = (1 << 4)
|
||||||
} zfs_type_t;
|
} 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 {
|
typedef enum dmu_objset_type {
|
||||||
DMU_OST_NONE,
|
DMU_OST_NONE,
|
||||||
DMU_OST_META,
|
DMU_OST_META,
|
||||||
|
@ -3224,7 +3224,7 @@ zfs_create(libzfs_handle_t *hdl, const char *path, zfs_type_t type,
|
|||||||
uint64_t blocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE);
|
uint64_t blocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE);
|
||||||
char errbuf[1024];
|
char errbuf[1024];
|
||||||
uint64_t zoned;
|
uint64_t zoned;
|
||||||
dmu_objset_type_t ost;
|
enum lzc_dataset_type ost;
|
||||||
|
|
||||||
(void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
|
(void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
|
||||||
"cannot create '%s'"), path);
|
"cannot create '%s'"), path);
|
||||||
@ -3251,9 +3251,9 @@ zfs_create(libzfs_handle_t *hdl, const char *path, zfs_type_t type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == ZFS_TYPE_VOLUME)
|
if (type == ZFS_TYPE_VOLUME)
|
||||||
ost = DMU_OST_ZVOL;
|
ost = LZC_DATSET_TYPE_ZVOL;
|
||||||
else
|
else
|
||||||
ost = DMU_OST_ZFS;
|
ost = LZC_DATSET_TYPE_ZFS;
|
||||||
|
|
||||||
/* open zpool handle for prop validation */
|
/* open zpool handle for prop validation */
|
||||||
char pool_path[ZFS_MAX_DATASET_NAME_LEN];
|
char pool_path[ZFS_MAX_DATASET_NAME_LEN];
|
||||||
|
@ -170,11 +170,11 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int error;
|
||||||
nvlist_t *args = fnvlist_alloc();
|
nvlist_t *args = fnvlist_alloc();
|
||||||
fnvlist_add_int32(args, "type", type);
|
fnvlist_add_int32(args, "type", (dmu_objset_type_t)type);
|
||||||
if (props != NULL)
|
if (props != NULL)
|
||||||
fnvlist_add_nvlist(args, "props", props);
|
fnvlist_add_nvlist(args, "props", props);
|
||||||
error = lzc_ioctl(ZFS_IOC_CREATE, fsname, args, NULL);
|
error = lzc_ioctl(ZFS_IOC_CREATE, fsname, args, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user