mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 11:18:52 +03:00
OpenZFS 7431 - ZFS Channel Programs
Authored by: Chris Williamson <chris.williamson@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: John Kennedy <john.kennedy@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Approved by: Garrett D'Amore <garrett@damore.org> Ported-by: Don Brady <don.brady@delphix.com> Ported-by: John Kennedy <john.kennedy@delphix.com> OpenZFS-issue: https://www.illumos.org/issues/7431 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/dfc11533 Porting Notes: * The CLI long option arguments for '-t' and '-m' don't parse on linux * Switched from kmem_alloc to vmem_alloc in zcp_lua_alloc * Lua implementation is built as its own module (zlua.ko) * Lua headers consumed directly by zfs code moved to 'include/sys/lua/' * There is no native setjmp/longjump available in stock Linux kernel. Brought over implementations from illumos and FreeBSD * The get_temporary_prop() was adapted due to VFS platform differences * Use of inline functions in lua parser to reduce stack usage per C call * Skip some ZFS Test Suite ZCP tests on sparc64 to avoid stack overflow
This commit is contained in:
committed by
Brian Behlendorf
parent
8824a7f133
commit
d99a015343
@@ -20,8 +20,7 @@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2011, 2016 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2013 Steven Hartland. All rights reserved.
|
||||
* Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
|
||||
*/
|
||||
@@ -236,6 +235,16 @@ dsl_dataset_phys(dsl_dataset_t *ds)
|
||||
return (ds->ds_dbuf->db_data);
|
||||
}
|
||||
|
||||
typedef struct dsl_dataset_promote_arg {
|
||||
const char *ddpa_clonename;
|
||||
dsl_dataset_t *ddpa_clone;
|
||||
list_t shared_snaps, origin_snaps, clone_snaps;
|
||||
dsl_dataset_t *origin_origin; /* origin of the origin */
|
||||
uint64_t used, comp, uncomp, unique, cloneusedsnap, originusedsnap;
|
||||
nvlist_t *err_ds;
|
||||
cred_t *cr;
|
||||
} dsl_dataset_promote_arg_t;
|
||||
|
||||
/*
|
||||
* The max length of a temporary tag prefix is the number of hex digits
|
||||
* required to express UINT64_MAX plus one for the hyphen.
|
||||
@@ -281,6 +290,8 @@ uint64_t dsl_dataset_create_sync(dsl_dir_t *pds, const char *lastname,
|
||||
uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin,
|
||||
struct dsl_crypto_params *dcp, uint64_t flags, dmu_tx_t *tx);
|
||||
int dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors);
|
||||
void dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx);
|
||||
int dsl_dataset_promote_check(void *arg, dmu_tx_t *tx);
|
||||
int dsl_dataset_promote(const char *name, char *conflsnap);
|
||||
int dsl_dataset_rename_snapshot(const char *fsname,
|
||||
const char *oldsnapname, const char *newsnapname, boolean_t recursive);
|
||||
@@ -305,7 +316,35 @@ int dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name,
|
||||
uint64_t *value);
|
||||
|
||||
void dsl_dataset_dirty(dsl_dataset_t *ds, dmu_tx_t *tx);
|
||||
void dsl_dataset_stats(dsl_dataset_t *ds, nvlist_t *nv);
|
||||
|
||||
int get_clones_stat_impl(dsl_dataset_t *ds, nvlist_t *val);
|
||||
char *get_receive_resume_stats_impl(dsl_dataset_t *ds);
|
||||
char *get_child_receive_stats(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_refratio(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_logicalreferenced(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_compressratio(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_used(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_creation(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_creationtxg(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_refquota(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_refreservation(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_guid(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_unique(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_objsetid(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_userrefs(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_defer_destroy(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_referenced(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_numclones(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_inconsistent(dsl_dataset_t *ds);
|
||||
uint64_t dsl_get_available(dsl_dataset_t *ds);
|
||||
int dsl_get_written(dsl_dataset_t *ds, uint64_t *written);
|
||||
int dsl_get_prev_snap(dsl_dataset_t *ds, char *snap);
|
||||
int dsl_get_mountpoint(dsl_dataset_t *ds, const char *dsname, char *value,
|
||||
char *source);
|
||||
|
||||
void get_clones_stat(dsl_dataset_t *ds, nvlist_t *nv);
|
||||
void dsl_dataset_stats(dsl_dataset_t *os, nvlist_t *nv);
|
||||
|
||||
void dsl_dataset_fast_stat(dsl_dataset_t *ds, dmu_objset_stats_t *stat);
|
||||
void dsl_dataset_space(dsl_dataset_t *ds,
|
||||
uint64_t *refdbytesp, uint64_t *availbytesp,
|
||||
|
||||
Reference in New Issue
Block a user