The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/include/libzfs.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 
   22 /*
   23  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
   24  * Copyright (c) 2011, 2022 by Delphix. All rights reserved.
   25  * Copyright Joyent, Inc.
   26  * Copyright (c) 2013 Steven Hartland. All rights reserved.
   27  * Copyright (c) 2016, Intel Corporation.
   28  * Copyright 2016 Nexenta Systems, Inc.
   29  * Copyright (c) 2017 Open-E, Inc. All Rights Reserved.
   30  * Copyright (c) 2019 Datto Inc.
   31  * Copyright (c) 2021, Colm Buckley <colm@tuatha.org>
   32  */
   33 
   34 #ifndef _LIBZFS_H
   35 #define _LIBZFS_H extern __attribute__((visibility("default")))
   36 
   37 #include <assert.h>
   38 #include <libshare.h>
   39 #include <libnvpair.h>
   40 #include <sys/mnttab.h>
   41 #include <sys/param.h>
   42 #include <sys/types.h>
   43 #include <sys/fs/zfs.h>
   44 #include <sys/avl.h>
   45 #include <libzfs_core.h>
   46 
   47 #ifdef  __cplusplus
   48 extern "C" {
   49 #endif
   50 
   51 /*
   52  * Miscellaneous ZFS constants
   53  */
   54 #define ZFS_MAXPROPLEN          MAXPATHLEN
   55 #define ZPOOL_MAXPROPLEN        MAXPATHLEN
   56 
   57 /*
   58  * libzfs errors
   59  */
   60 typedef enum zfs_error {
   61         EZFS_SUCCESS = 0,       /* no error -- success */
   62         EZFS_NOMEM = 2000,      /* out of memory */
   63         EZFS_BADPROP,           /* invalid property value */
   64         EZFS_PROPREADONLY,      /* cannot set readonly property */
   65         EZFS_PROPTYPE,          /* property does not apply to dataset type */
   66         EZFS_PROPNONINHERIT,    /* property is not inheritable */
   67         EZFS_PROPSPACE,         /* bad quota or reservation */
   68         EZFS_BADTYPE,           /* dataset is not of appropriate type */
   69         EZFS_BUSY,              /* pool or dataset is busy */
   70         EZFS_EXISTS,            /* pool or dataset already exists */
   71         EZFS_NOENT,             /* no such pool or dataset */
   72         EZFS_BADSTREAM,         /* bad backup stream */
   73         EZFS_DSREADONLY,        /* dataset is readonly */
   74         EZFS_VOLTOOBIG,         /* volume is too large for 32-bit system */
   75         EZFS_INVALIDNAME,       /* invalid dataset name */
   76         EZFS_BADRESTORE,        /* unable to restore to destination */
   77         EZFS_BADBACKUP,         /* backup failed */
   78         EZFS_BADTARGET,         /* bad attach/detach/replace target */
   79         EZFS_NODEVICE,          /* no such device in pool */
   80         EZFS_BADDEV,            /* invalid device to add */
   81         EZFS_NOREPLICAS,        /* no valid replicas */
   82         EZFS_RESILVERING,       /* resilvering (healing reconstruction) */
   83         EZFS_BADVERSION,        /* unsupported version */
   84         EZFS_POOLUNAVAIL,       /* pool is currently unavailable */
   85         EZFS_DEVOVERFLOW,       /* too many devices in one vdev */
   86         EZFS_BADPATH,           /* must be an absolute path */
   87         EZFS_CROSSTARGET,       /* rename or clone across pool or dataset */
   88         EZFS_ZONED,             /* used improperly in local zone */
   89         EZFS_MOUNTFAILED,       /* failed to mount dataset */
   90         EZFS_UMOUNTFAILED,      /* failed to unmount dataset */
   91         EZFS_UNSHARENFSFAILED,  /* failed to unshare over nfs */
   92         EZFS_SHARENFSFAILED,    /* failed to share over nfs */
   93         EZFS_PERM,              /* permission denied */
   94         EZFS_NOSPC,             /* out of space */
   95         EZFS_FAULT,             /* bad address */
   96         EZFS_IO,                /* I/O error */
   97         EZFS_INTR,              /* signal received */
   98         EZFS_ISSPARE,           /* device is a hot spare */
   99         EZFS_INVALCONFIG,       /* invalid vdev configuration */
  100         EZFS_RECURSIVE,         /* recursive dependency */
  101         EZFS_NOHISTORY,         /* no history object */
  102         EZFS_POOLPROPS,         /* couldn't retrieve pool props */
  103         EZFS_POOL_NOTSUP,       /* ops not supported for this type of pool */
  104         EZFS_POOL_INVALARG,     /* invalid argument for this pool operation */
  105         EZFS_NAMETOOLONG,       /* dataset name is too long */
  106         EZFS_OPENFAILED,        /* open of device failed */
  107         EZFS_NOCAP,             /* couldn't get capacity */
  108         EZFS_LABELFAILED,       /* write of label failed */
  109         EZFS_BADWHO,            /* invalid permission who */
  110         EZFS_BADPERM,           /* invalid permission */
  111         EZFS_BADPERMSET,        /* invalid permission set name */
  112         EZFS_NODELEGATION,      /* delegated administration is disabled */
  113         EZFS_UNSHARESMBFAILED,  /* failed to unshare over smb */
  114         EZFS_SHARESMBFAILED,    /* failed to share over smb */
  115         EZFS_BADCACHE,          /* bad cache file */
  116         EZFS_ISL2CACHE,         /* device is for the level 2 ARC */
  117         EZFS_VDEVNOTSUP,        /* unsupported vdev type */
  118         EZFS_NOTSUP,            /* ops not supported on this dataset */
  119         EZFS_ACTIVE_SPARE,      /* pool has active shared spare devices */
  120         EZFS_UNPLAYED_LOGS,     /* log device has unplayed logs */
  121         EZFS_REFTAG_RELE,       /* snapshot release: tag not found */
  122         EZFS_REFTAG_HOLD,       /* snapshot hold: tag already exists */
  123         EZFS_TAGTOOLONG,        /* snapshot hold/rele: tag too long */
  124         EZFS_PIPEFAILED,        /* pipe create failed */
  125         EZFS_THREADCREATEFAILED, /* thread create failed */
  126         EZFS_POSTSPLIT_ONLINE,  /* onlining a disk after splitting it */
  127         EZFS_SCRUBBING,         /* currently scrubbing */
  128         EZFS_NO_SCRUB,          /* no active scrub */
  129         EZFS_DIFF,              /* general failure of zfs diff */
  130         EZFS_DIFFDATA,          /* bad zfs diff data */
  131         EZFS_POOLREADONLY,      /* pool is in read-only mode */
  132         EZFS_SCRUB_PAUSED,      /* scrub currently paused */
  133         EZFS_ACTIVE_POOL,       /* pool is imported on a different system */
  134         EZFS_CRYPTOFAILED,      /* failed to setup encryption */
  135         EZFS_NO_PENDING,        /* cannot cancel, no operation is pending */
  136         EZFS_CHECKPOINT_EXISTS, /* checkpoint exists */
  137         EZFS_DISCARDING_CHECKPOINT,     /* currently discarding a checkpoint */
  138         EZFS_NO_CHECKPOINT,     /* pool has no checkpoint */
  139         EZFS_DEVRM_IN_PROGRESS, /* a device is currently being removed */
  140         EZFS_VDEV_TOO_BIG,      /* a device is too big to be used */
  141         EZFS_IOC_NOTSUPPORTED,  /* operation not supported by zfs module */
  142         EZFS_TOOMANY,           /* argument list too long */
  143         EZFS_INITIALIZING,      /* currently initializing */
  144         EZFS_NO_INITIALIZE,     /* no active initialize */
  145         EZFS_WRONG_PARENT,      /* invalid parent dataset (e.g ZVOL) */
  146         EZFS_TRIMMING,          /* currently trimming */
  147         EZFS_NO_TRIM,           /* no active trim */
  148         EZFS_TRIM_NOTSUP,       /* device does not support trim */
  149         EZFS_NO_RESILVER_DEFER, /* pool doesn't support resilver_defer */
  150         EZFS_EXPORT_IN_PROGRESS,        /* currently exporting the pool */
  151         EZFS_REBUILDING,        /* resilvering (sequential reconstrution) */
  152         EZFS_VDEV_NOTSUP,       /* ops not supported for this type of vdev */
  153         EZFS_NOT_USER_NAMESPACE,        /* a file is not a user namespace */
  154         EZFS_CKSUM,             /* insufficient replicas */
  155         EZFS_RESUME_EXISTS,     /* Resume on existing dataset without force */
  156         EZFS_UNKNOWN
  157 } zfs_error_t;
  158 
  159 /*
  160  * The following data structures are all part
  161  * of the zfs_allow_t data structure which is
  162  * used for printing 'allow' permissions.
  163  * It is a linked list of zfs_allow_t's which
  164  * then contain avl tree's for user/group/sets/...
  165  * and each one of the entries in those trees have
  166  * avl tree's for the permissions they belong to and
  167  * whether they are local,descendent or local+descendent
  168  * permissions.  The AVL trees are used primarily for
  169  * sorting purposes, but also so that we can quickly find
  170  * a given user and or permission.
  171  */
  172 typedef struct zfs_perm_node {
  173         avl_node_t z_node;
  174         char z_pname[MAXPATHLEN];
  175 } zfs_perm_node_t;
  176 
  177 typedef struct zfs_allow_node {
  178         avl_node_t z_node;
  179         char z_key[MAXPATHLEN];         /* name, such as joe */
  180         avl_tree_t z_localdescend;      /* local+descendent perms */
  181         avl_tree_t z_local;             /* local permissions */
  182         avl_tree_t z_descend;           /* descendent permissions */
  183 } zfs_allow_node_t;
  184 
  185 typedef struct zfs_allow {
  186         struct zfs_allow *z_next;
  187         char z_setpoint[MAXPATHLEN];
  188         avl_tree_t z_sets;
  189         avl_tree_t z_crperms;
  190         avl_tree_t z_user;
  191         avl_tree_t z_group;
  192         avl_tree_t z_everyone;
  193 } zfs_allow_t;
  194 
  195 /*
  196  * Basic handle types
  197  */
  198 typedef struct zfs_handle zfs_handle_t;
  199 typedef struct zpool_handle zpool_handle_t;
  200 typedef struct libzfs_handle libzfs_handle_t;
  201 
  202 _LIBZFS_H int zpool_wait(zpool_handle_t *, zpool_wait_activity_t);
  203 _LIBZFS_H int zpool_wait_status(zpool_handle_t *, zpool_wait_activity_t,
  204     boolean_t *, boolean_t *);
  205 
  206 /*
  207  * Library initialization
  208  */
  209 _LIBZFS_H libzfs_handle_t *libzfs_init(void);
  210 _LIBZFS_H void libzfs_fini(libzfs_handle_t *);
  211 
  212 _LIBZFS_H libzfs_handle_t *zpool_get_handle(zpool_handle_t *);
  213 _LIBZFS_H libzfs_handle_t *zfs_get_handle(zfs_handle_t *);
  214 
  215 _LIBZFS_H void libzfs_print_on_error(libzfs_handle_t *, boolean_t);
  216 
  217 _LIBZFS_H void zfs_save_arguments(int argc, char **, char *, int);
  218 _LIBZFS_H int zpool_log_history(libzfs_handle_t *, const char *);
  219 
  220 _LIBZFS_H int libzfs_errno(libzfs_handle_t *);
  221 _LIBZFS_H const char *libzfs_error_init(int);
  222 _LIBZFS_H const char *libzfs_error_action(libzfs_handle_t *);
  223 _LIBZFS_H const char *libzfs_error_description(libzfs_handle_t *);
  224 _LIBZFS_H int zfs_standard_error(libzfs_handle_t *, int, const char *);
  225 _LIBZFS_H void libzfs_mnttab_init(libzfs_handle_t *);
  226 _LIBZFS_H void libzfs_mnttab_fini(libzfs_handle_t *);
  227 _LIBZFS_H void libzfs_mnttab_cache(libzfs_handle_t *, boolean_t);
  228 _LIBZFS_H int libzfs_mnttab_find(libzfs_handle_t *, const char *,
  229     struct mnttab *);
  230 _LIBZFS_H void libzfs_mnttab_add(libzfs_handle_t *, const char *,
  231     const char *, const char *);
  232 _LIBZFS_H void libzfs_mnttab_remove(libzfs_handle_t *, const char *);
  233 
  234 /*
  235  * Basic handle functions
  236  */
  237 _LIBZFS_H zpool_handle_t *zpool_open(libzfs_handle_t *, const char *);
  238 _LIBZFS_H zpool_handle_t *zpool_open_canfail(libzfs_handle_t *, const char *);
  239 _LIBZFS_H void zpool_close(zpool_handle_t *);
  240 _LIBZFS_H const char *zpool_get_name(zpool_handle_t *);
  241 _LIBZFS_H int zpool_get_state(zpool_handle_t *);
  242 _LIBZFS_H const char *zpool_state_to_name(vdev_state_t, vdev_aux_t);
  243 _LIBZFS_H const char *zpool_pool_state_to_name(pool_state_t);
  244 _LIBZFS_H void zpool_free_handles(libzfs_handle_t *);
  245 
  246 /*
  247  * Iterate over all active pools in the system.
  248  */
  249 typedef int (*zpool_iter_f)(zpool_handle_t *, void *);
  250 _LIBZFS_H int zpool_iter(libzfs_handle_t *, zpool_iter_f, void *);
  251 _LIBZFS_H boolean_t zpool_skip_pool(const char *);
  252 
  253 /*
  254  * Functions to create and destroy pools
  255  */
  256 _LIBZFS_H int zpool_create(libzfs_handle_t *, const char *, nvlist_t *,
  257     nvlist_t *, nvlist_t *);
  258 _LIBZFS_H int zpool_destroy(zpool_handle_t *, const char *);
  259 _LIBZFS_H int zpool_add(zpool_handle_t *, nvlist_t *);
  260 
  261 typedef struct splitflags {
  262         /* do not split, but return the config that would be split off */
  263         unsigned int dryrun : 1;
  264 
  265         /* after splitting, import the pool */
  266         unsigned int import : 1;
  267         int name_flags;
  268 } splitflags_t;
  269 
  270 typedef struct trimflags {
  271         /* requested vdevs are for the entire pool */
  272         boolean_t fullpool;
  273 
  274         /* request a secure trim, requires support from device */
  275         boolean_t secure;
  276 
  277         /* after starting trim, block until trim completes */
  278         boolean_t wait;
  279 
  280         /* trim at the requested rate in bytes/second */
  281         uint64_t rate;
  282 } trimflags_t;
  283 
  284 /*
  285  * Functions to manipulate pool and vdev state
  286  */
  287 _LIBZFS_H int zpool_scan(zpool_handle_t *, pool_scan_func_t, pool_scrub_cmd_t);
  288 _LIBZFS_H int zpool_initialize(zpool_handle_t *, pool_initialize_func_t,
  289     nvlist_t *);
  290 _LIBZFS_H int zpool_initialize_wait(zpool_handle_t *, pool_initialize_func_t,
  291     nvlist_t *);
  292 _LIBZFS_H int zpool_trim(zpool_handle_t *, pool_trim_func_t, nvlist_t *,
  293     trimflags_t *);
  294 
  295 _LIBZFS_H int zpool_clear(zpool_handle_t *, const char *, nvlist_t *);
  296 _LIBZFS_H int zpool_reguid(zpool_handle_t *);
  297 _LIBZFS_H int zpool_reopen_one(zpool_handle_t *, void *);
  298 
  299 _LIBZFS_H int zpool_sync_one(zpool_handle_t *, void *);
  300 
  301 _LIBZFS_H int zpool_vdev_online(zpool_handle_t *, const char *, int,
  302     vdev_state_t *);
  303 _LIBZFS_H int zpool_vdev_offline(zpool_handle_t *, const char *, boolean_t);
  304 _LIBZFS_H int zpool_vdev_attach(zpool_handle_t *, const char *,
  305     const char *, nvlist_t *, int, boolean_t);
  306 _LIBZFS_H int zpool_vdev_detach(zpool_handle_t *, const char *);
  307 _LIBZFS_H int zpool_vdev_remove(zpool_handle_t *, const char *);
  308 _LIBZFS_H int zpool_vdev_remove_cancel(zpool_handle_t *);
  309 _LIBZFS_H int zpool_vdev_indirect_size(zpool_handle_t *, const char *,
  310     uint64_t *);
  311 _LIBZFS_H int zpool_vdev_split(zpool_handle_t *, char *, nvlist_t **,
  312     nvlist_t *, splitflags_t);
  313 _LIBZFS_H int zpool_vdev_remove_wanted(zpool_handle_t *, const char *);
  314 
  315 _LIBZFS_H int zpool_vdev_fault(zpool_handle_t *, uint64_t, vdev_aux_t);
  316 _LIBZFS_H int zpool_vdev_degrade(zpool_handle_t *, uint64_t, vdev_aux_t);
  317 _LIBZFS_H int zpool_vdev_clear(zpool_handle_t *, uint64_t);
  318 
  319 _LIBZFS_H nvlist_t *zpool_find_vdev(zpool_handle_t *, const char *, boolean_t *,
  320     boolean_t *, boolean_t *);
  321 _LIBZFS_H nvlist_t *zpool_find_vdev_by_physpath(zpool_handle_t *, const char *,
  322     boolean_t *, boolean_t *, boolean_t *);
  323 _LIBZFS_H int zpool_label_disk(libzfs_handle_t *, zpool_handle_t *,
  324     const char *);
  325 _LIBZFS_H uint64_t zpool_vdev_path_to_guid(zpool_handle_t *zhp,
  326     const char *path);
  327 
  328 _LIBZFS_H const char *zpool_get_state_str(zpool_handle_t *);
  329 
  330 /*
  331  * Functions to manage pool properties
  332  */
  333 _LIBZFS_H int zpool_set_prop(zpool_handle_t *, const char *, const char *);
  334 _LIBZFS_H int zpool_get_prop(zpool_handle_t *, zpool_prop_t, char *,
  335     size_t proplen, zprop_source_t *, boolean_t literal);
  336 _LIBZFS_H uint64_t zpool_get_prop_int(zpool_handle_t *, zpool_prop_t,
  337     zprop_source_t *);
  338 _LIBZFS_H int zpool_props_refresh(zpool_handle_t *);
  339 
  340 _LIBZFS_H const char *zpool_prop_to_name(zpool_prop_t);
  341 _LIBZFS_H const char *zpool_prop_values(zpool_prop_t);
  342 
  343 /*
  344  * Functions to manage vdev properties
  345  */
  346 _LIBZFS_H int zpool_get_vdev_prop_value(nvlist_t *, vdev_prop_t, char *, char *,
  347     size_t, zprop_source_t *, boolean_t);
  348 _LIBZFS_H int zpool_get_vdev_prop(zpool_handle_t *, const char *, vdev_prop_t,
  349     char *, char *, size_t, zprop_source_t *, boolean_t);
  350 _LIBZFS_H int zpool_get_all_vdev_props(zpool_handle_t *, const char *,
  351     nvlist_t **);
  352 _LIBZFS_H int zpool_set_vdev_prop(zpool_handle_t *, const char *, const char *,
  353     const char *);
  354 
  355 _LIBZFS_H const char *vdev_prop_to_name(vdev_prop_t);
  356 _LIBZFS_H const char *vdev_prop_values(vdev_prop_t);
  357 _LIBZFS_H boolean_t vdev_prop_user(const char *name);
  358 _LIBZFS_H const char *vdev_prop_column_name(vdev_prop_t);
  359 _LIBZFS_H boolean_t vdev_prop_align_right(vdev_prop_t);
  360 
  361 /*
  362  * Pool health statistics.
  363  */
  364 typedef enum {
  365         /*
  366          * The following correspond to faults as defined in the (fault.fs.zfs.*)
  367          * event namespace.  Each is associated with a corresponding message ID.
  368          * This must be kept in sync with the zfs_msgid_table in
  369          * lib/libzfs/libzfs_status.c.
  370          */
  371         ZPOOL_STATUS_CORRUPT_CACHE,     /* corrupt /kernel/drv/zpool.cache */
  372         ZPOOL_STATUS_MISSING_DEV_R,     /* missing device with replicas */
  373         ZPOOL_STATUS_MISSING_DEV_NR,    /* missing device with no replicas */
  374         ZPOOL_STATUS_CORRUPT_LABEL_R,   /* bad device label with replicas */
  375         ZPOOL_STATUS_CORRUPT_LABEL_NR,  /* bad device label with no replicas */
  376         ZPOOL_STATUS_BAD_GUID_SUM,      /* sum of device guids didn't match */
  377         ZPOOL_STATUS_CORRUPT_POOL,      /* pool metadata is corrupted */
  378         ZPOOL_STATUS_CORRUPT_DATA,      /* data errors in user (meta)data */
  379         ZPOOL_STATUS_FAILING_DEV,       /* device experiencing errors */
  380         ZPOOL_STATUS_VERSION_NEWER,     /* newer on-disk version */
  381         ZPOOL_STATUS_HOSTID_MISMATCH,   /* last accessed by another system */
  382         ZPOOL_STATUS_HOSTID_ACTIVE,     /* currently active on another system */
  383         ZPOOL_STATUS_HOSTID_REQUIRED,   /* multihost=on and hostid=0 */
  384         ZPOOL_STATUS_IO_FAILURE_WAIT,   /* failed I/O, failmode 'wait' */
  385         ZPOOL_STATUS_IO_FAILURE_CONTINUE, /* failed I/O, failmode 'continue' */
  386         ZPOOL_STATUS_IO_FAILURE_MMP,    /* failed MMP, failmode not 'panic' */
  387         ZPOOL_STATUS_BAD_LOG,           /* cannot read log chain(s) */
  388         ZPOOL_STATUS_ERRATA,            /* informational errata available */
  389 
  390         /*
  391          * If the pool has unsupported features but can still be opened in
  392          * read-only mode, its status is ZPOOL_STATUS_UNSUP_FEAT_WRITE. If the
  393          * pool has unsupported features but cannot be opened at all, its
  394          * status is ZPOOL_STATUS_UNSUP_FEAT_READ.
  395          */
  396         ZPOOL_STATUS_UNSUP_FEAT_READ,   /* unsupported features for read */
  397         ZPOOL_STATUS_UNSUP_FEAT_WRITE,  /* unsupported features for write */
  398 
  399         /*
  400          * These faults have no corresponding message ID.  At the time we are
  401          * checking the status, the original reason for the FMA fault (I/O or
  402          * checksum errors) has been lost.
  403          */
  404         ZPOOL_STATUS_FAULTED_DEV_R,     /* faulted device with replicas */
  405         ZPOOL_STATUS_FAULTED_DEV_NR,    /* faulted device with no replicas */
  406 
  407         /*
  408          * The following are not faults per se, but still an error possibly
  409          * requiring administrative attention.  There is no corresponding
  410          * message ID.
  411          */
  412         ZPOOL_STATUS_VERSION_OLDER,     /* older legacy on-disk version */
  413         ZPOOL_STATUS_FEAT_DISABLED,     /* supported features are disabled */
  414         ZPOOL_STATUS_RESILVERING,       /* device being resilvered */
  415         ZPOOL_STATUS_OFFLINE_DEV,       /* device offline */
  416         ZPOOL_STATUS_REMOVED_DEV,       /* removed device */
  417         ZPOOL_STATUS_REBUILDING,        /* device being rebuilt */
  418         ZPOOL_STATUS_REBUILD_SCRUB,     /* recommend scrubbing the pool */
  419         ZPOOL_STATUS_NON_NATIVE_ASHIFT, /* (e.g. 512e dev with ashift of 9) */
  420         ZPOOL_STATUS_COMPATIBILITY_ERR, /* bad 'compatibility' property */
  421         ZPOOL_STATUS_INCOMPATIBLE_FEAT, /* feature set outside compatibility */
  422 
  423         /*
  424          * Finally, the following indicates a healthy pool.
  425          */
  426         ZPOOL_STATUS_OK
  427 } zpool_status_t;
  428 
  429 _LIBZFS_H zpool_status_t zpool_get_status(zpool_handle_t *, const char **,
  430     zpool_errata_t *);
  431 _LIBZFS_H zpool_status_t zpool_import_status(nvlist_t *, const char **,
  432     zpool_errata_t *);
  433 
  434 /*
  435  * Statistics and configuration functions.
  436  */
  437 _LIBZFS_H nvlist_t *zpool_get_config(zpool_handle_t *, nvlist_t **);
  438 _LIBZFS_H nvlist_t *zpool_get_features(zpool_handle_t *);
  439 _LIBZFS_H int zpool_refresh_stats(zpool_handle_t *, boolean_t *);
  440 _LIBZFS_H int zpool_get_errlog(zpool_handle_t *, nvlist_t **);
  441 
  442 /*
  443  * Import and export functions
  444  */
  445 _LIBZFS_H int zpool_export(zpool_handle_t *, boolean_t, const char *);
  446 _LIBZFS_H int zpool_export_force(zpool_handle_t *, const char *);
  447 _LIBZFS_H int zpool_import(libzfs_handle_t *, nvlist_t *, const char *,
  448     char *altroot);
  449 _LIBZFS_H int zpool_import_props(libzfs_handle_t *, nvlist_t *, const char *,
  450     nvlist_t *, int);
  451 _LIBZFS_H void zpool_print_unsup_feat(nvlist_t *config);
  452 
  453 /*
  454  * Miscellaneous pool functions
  455  */
  456 struct zfs_cmd;
  457 
  458 _LIBZFS_H const char *const zfs_history_event_names[];
  459 
  460 typedef enum {
  461         VDEV_NAME_PATH          = 1 << 0,
  462         VDEV_NAME_GUID          = 1 << 1,
  463         VDEV_NAME_FOLLOW_LINKS  = 1 << 2,
  464         VDEV_NAME_TYPE_ID       = 1 << 3,
  465 } vdev_name_t;
  466 
  467 _LIBZFS_H char *zpool_vdev_name(libzfs_handle_t *, zpool_handle_t *, nvlist_t *,
  468     int name_flags);
  469 _LIBZFS_H int zpool_upgrade(zpool_handle_t *, uint64_t);
  470 _LIBZFS_H int zpool_get_history(zpool_handle_t *, nvlist_t **, uint64_t *,
  471     boolean_t *);
  472 _LIBZFS_H int zpool_events_next(libzfs_handle_t *, nvlist_t **, int *, unsigned,
  473     int);
  474 _LIBZFS_H int zpool_events_clear(libzfs_handle_t *, int *);
  475 _LIBZFS_H int zpool_events_seek(libzfs_handle_t *, uint64_t, int);
  476 _LIBZFS_H void zpool_obj_to_path_ds(zpool_handle_t *, uint64_t, uint64_t,
  477     char *, size_t);
  478 _LIBZFS_H void zpool_obj_to_path(zpool_handle_t *, uint64_t, uint64_t, char *,
  479     size_t);
  480 _LIBZFS_H int zfs_ioctl(libzfs_handle_t *, int, struct zfs_cmd *);
  481 _LIBZFS_H void zpool_explain_recover(libzfs_handle_t *, const char *, int,
  482     nvlist_t *);
  483 _LIBZFS_H int zpool_checkpoint(zpool_handle_t *);
  484 _LIBZFS_H int zpool_discard_checkpoint(zpool_handle_t *);
  485 _LIBZFS_H boolean_t zpool_is_draid_spare(const char *);
  486 
  487 /*
  488  * Basic handle manipulations.  These functions do not create or destroy the
  489  * underlying datasets, only the references to them.
  490  */
  491 _LIBZFS_H zfs_handle_t *zfs_open(libzfs_handle_t *, const char *, int);
  492 _LIBZFS_H zfs_handle_t *zfs_handle_dup(zfs_handle_t *);
  493 _LIBZFS_H void zfs_close(zfs_handle_t *);
  494 _LIBZFS_H zfs_type_t zfs_get_type(const zfs_handle_t *);
  495 _LIBZFS_H zfs_type_t zfs_get_underlying_type(const zfs_handle_t *);
  496 _LIBZFS_H const char *zfs_get_name(const zfs_handle_t *);
  497 _LIBZFS_H zpool_handle_t *zfs_get_pool_handle(const zfs_handle_t *);
  498 _LIBZFS_H const char *zfs_get_pool_name(const zfs_handle_t *);
  499 
  500 /*
  501  * Property management functions.  Some functions are shared with the kernel,
  502  * and are found in sys/fs/zfs.h.
  503  */
  504 
  505 /*
  506  * zfs dataset property management
  507  */
  508 _LIBZFS_H const char *zfs_prop_default_string(zfs_prop_t);
  509 _LIBZFS_H uint64_t zfs_prop_default_numeric(zfs_prop_t);
  510 _LIBZFS_H const char *zfs_prop_column_name(zfs_prop_t);
  511 _LIBZFS_H boolean_t zfs_prop_align_right(zfs_prop_t);
  512 
  513 _LIBZFS_H nvlist_t *zfs_valid_proplist(libzfs_handle_t *, zfs_type_t,
  514     nvlist_t *, uint64_t, zfs_handle_t *, zpool_handle_t *, boolean_t,
  515     const char *);
  516 
  517 _LIBZFS_H const char *zfs_prop_to_name(zfs_prop_t);
  518 _LIBZFS_H int zfs_prop_set(zfs_handle_t *, const char *, const char *);
  519 _LIBZFS_H int zfs_prop_set_list(zfs_handle_t *, nvlist_t *);
  520 _LIBZFS_H int zfs_prop_get(zfs_handle_t *, zfs_prop_t, char *, size_t,
  521     zprop_source_t *, char *, size_t, boolean_t);
  522 _LIBZFS_H int zfs_prop_get_recvd(zfs_handle_t *, const char *, char *, size_t,
  523     boolean_t);
  524 _LIBZFS_H int zfs_prop_get_numeric(zfs_handle_t *, zfs_prop_t, uint64_t *,
  525     zprop_source_t *, char *, size_t);
  526 _LIBZFS_H int zfs_prop_get_userquota_int(zfs_handle_t *zhp,
  527     const char *propname, uint64_t *propvalue);
  528 _LIBZFS_H int zfs_prop_get_userquota(zfs_handle_t *zhp, const char *propname,
  529     char *propbuf, int proplen, boolean_t literal);
  530 _LIBZFS_H int zfs_prop_get_written_int(zfs_handle_t *zhp, const char *propname,
  531     uint64_t *propvalue);
  532 _LIBZFS_H int zfs_prop_get_written(zfs_handle_t *zhp, const char *propname,
  533     char *propbuf, int proplen, boolean_t literal);
  534 _LIBZFS_H int zfs_prop_get_feature(zfs_handle_t *zhp, const char *propname,
  535     char *buf, size_t len);
  536 _LIBZFS_H uint64_t getprop_uint64(zfs_handle_t *, zfs_prop_t, char **);
  537 _LIBZFS_H uint64_t zfs_prop_get_int(zfs_handle_t *, zfs_prop_t);
  538 _LIBZFS_H int zfs_prop_inherit(zfs_handle_t *, const char *, boolean_t);
  539 _LIBZFS_H const char *zfs_prop_values(zfs_prop_t);
  540 _LIBZFS_H int zfs_prop_is_string(zfs_prop_t prop);
  541 _LIBZFS_H nvlist_t *zfs_get_all_props(zfs_handle_t *);
  542 _LIBZFS_H nvlist_t *zfs_get_user_props(zfs_handle_t *);
  543 _LIBZFS_H nvlist_t *zfs_get_recvd_props(zfs_handle_t *);
  544 _LIBZFS_H nvlist_t *zfs_get_clones_nvl(zfs_handle_t *);
  545 
  546 _LIBZFS_H int zfs_wait_status(zfs_handle_t *, zfs_wait_activity_t,
  547     boolean_t *, boolean_t *);
  548 
  549 /*
  550  * zfs encryption management
  551  */
  552 _LIBZFS_H int zfs_crypto_get_encryption_root(zfs_handle_t *, boolean_t *,
  553     char *);
  554 _LIBZFS_H int zfs_crypto_create(libzfs_handle_t *, char *, nvlist_t *,
  555     nvlist_t *, boolean_t stdin_available, uint8_t **, uint_t *);
  556 _LIBZFS_H int zfs_crypto_clone_check(libzfs_handle_t *, zfs_handle_t *, char *,
  557     nvlist_t *);
  558 _LIBZFS_H int zfs_crypto_attempt_load_keys(libzfs_handle_t *, const char *);
  559 _LIBZFS_H int zfs_crypto_load_key(zfs_handle_t *, boolean_t, const char *);
  560 _LIBZFS_H int zfs_crypto_unload_key(zfs_handle_t *);
  561 _LIBZFS_H int zfs_crypto_rewrap(zfs_handle_t *, nvlist_t *, boolean_t);
  562 
  563 typedef struct zprop_list {
  564         int             pl_prop;
  565         char            *pl_user_prop;
  566         struct zprop_list *pl_next;
  567         boolean_t       pl_all;
  568         size_t          pl_width;
  569         size_t          pl_recvd_width;
  570         boolean_t       pl_fixed;
  571 } zprop_list_t;
  572 
  573 _LIBZFS_H int zfs_expand_proplist(zfs_handle_t *, zprop_list_t **, boolean_t,
  574     boolean_t);
  575 _LIBZFS_H void zfs_prune_proplist(zfs_handle_t *, uint8_t *);
  576 _LIBZFS_H int vdev_expand_proplist(zpool_handle_t *, const char *,
  577     zprop_list_t **);
  578 
  579 #define ZFS_MOUNTPOINT_NONE     "none"
  580 #define ZFS_MOUNTPOINT_LEGACY   "legacy"
  581 
  582 #define ZFS_FEATURE_DISABLED    "disabled"
  583 #define ZFS_FEATURE_ENABLED     "enabled"
  584 #define ZFS_FEATURE_ACTIVE      "active"
  585 
  586 #define ZFS_UNSUPPORTED_INACTIVE        "inactive"
  587 #define ZFS_UNSUPPORTED_READONLY        "readonly"
  588 
  589 /*
  590  * zpool property management
  591  */
  592 _LIBZFS_H int zpool_expand_proplist(zpool_handle_t *, zprop_list_t **,
  593     zfs_type_t, boolean_t);
  594 _LIBZFS_H int zpool_prop_get_feature(zpool_handle_t *, const char *, char *,
  595     size_t);
  596 _LIBZFS_H const char *zpool_prop_default_string(zpool_prop_t);
  597 _LIBZFS_H uint64_t zpool_prop_default_numeric(zpool_prop_t);
  598 _LIBZFS_H const char *zpool_prop_column_name(zpool_prop_t);
  599 _LIBZFS_H boolean_t zpool_prop_align_right(zpool_prop_t);
  600 
  601 /*
  602  * Functions shared by zfs and zpool property management.
  603  */
  604 _LIBZFS_H int zprop_iter(zprop_func func, void *cb, boolean_t show_all,
  605     boolean_t ordered, zfs_type_t type);
  606 _LIBZFS_H int zprop_get_list(libzfs_handle_t *, char *, zprop_list_t **,
  607     zfs_type_t);
  608 _LIBZFS_H void zprop_free_list(zprop_list_t *);
  609 
  610 #define ZFS_GET_NCOLS   5
  611 
  612 typedef enum {
  613         GET_COL_NONE,
  614         GET_COL_NAME,
  615         GET_COL_PROPERTY,
  616         GET_COL_VALUE,
  617         GET_COL_RECVD,
  618         GET_COL_SOURCE
  619 } zfs_get_column_t;
  620 
  621 /*
  622  * Functions for printing zfs or zpool properties
  623  */
  624 typedef struct vdev_cbdata {
  625         int cb_name_flags;
  626         char **cb_names;
  627         unsigned int cb_names_count;
  628 } vdev_cbdata_t;
  629 
  630 typedef struct zprop_get_cbdata {
  631         int cb_sources;
  632         zfs_get_column_t cb_columns[ZFS_GET_NCOLS];
  633         int cb_colwidths[ZFS_GET_NCOLS + 1];
  634         boolean_t cb_scripted;
  635         boolean_t cb_literal;
  636         boolean_t cb_first;
  637         zprop_list_t *cb_proplist;
  638         zfs_type_t cb_type;
  639         vdev_cbdata_t cb_vdevs;
  640 } zprop_get_cbdata_t;
  641 
  642 _LIBZFS_H void zprop_print_one_property(const char *, zprop_get_cbdata_t *,
  643     const char *, const char *, zprop_source_t, const char *,
  644     const char *);
  645 
  646 /*
  647  * Iterator functions.
  648  */
  649 #define ZFS_ITER_RECURSE                (1 << 0)
  650 #define ZFS_ITER_ARGS_CAN_BE_PATHS      (1 << 1)
  651 #define ZFS_ITER_PROP_LISTSNAPS         (1 << 2)
  652 #define ZFS_ITER_DEPTH_LIMIT            (1 << 3)
  653 #define ZFS_ITER_RECVD_PROPS            (1 << 4)
  654 #define ZFS_ITER_LITERAL_PROPS          (1 << 5)
  655 #define ZFS_ITER_SIMPLE                 (1 << 6)
  656 
  657 typedef int (*zfs_iter_f)(zfs_handle_t *, void *);
  658 _LIBZFS_H int zfs_iter_root(libzfs_handle_t *, zfs_iter_f, void *);
  659 _LIBZFS_H int zfs_iter_children(zfs_handle_t *, int, zfs_iter_f, void *);
  660 _LIBZFS_H int zfs_iter_dependents(zfs_handle_t *, int, boolean_t, zfs_iter_f,
  661     void *);
  662 _LIBZFS_H int zfs_iter_filesystems(zfs_handle_t *, int, zfs_iter_f, void *);
  663 _LIBZFS_H int zfs_iter_snapshots(zfs_handle_t *, int, zfs_iter_f, void *,
  664     uint64_t, uint64_t);
  665 _LIBZFS_H int zfs_iter_snapshots_sorted(zfs_handle_t *, int, zfs_iter_f, void *,
  666     uint64_t, uint64_t);
  667 _LIBZFS_H int zfs_iter_snapspec(zfs_handle_t *, int, const char *, zfs_iter_f,
  668     void *);
  669 _LIBZFS_H int zfs_iter_bookmarks(zfs_handle_t *, int, zfs_iter_f, void *);
  670 _LIBZFS_H int zfs_iter_mounted(zfs_handle_t *, zfs_iter_f, void *);
  671 
  672 typedef struct get_all_cb {
  673         zfs_handle_t    **cb_handles;
  674         size_t          cb_alloc;
  675         size_t          cb_used;
  676 } get_all_cb_t;
  677 
  678 _LIBZFS_H void zfs_foreach_mountpoint(libzfs_handle_t *, zfs_handle_t **,
  679     size_t, zfs_iter_f, void *, boolean_t);
  680 _LIBZFS_H void libzfs_add_handle(get_all_cb_t *, zfs_handle_t *);
  681 
  682 /*
  683  * Functions to create and destroy datasets.
  684  */
  685 _LIBZFS_H int zfs_create(libzfs_handle_t *, const char *, zfs_type_t,
  686     nvlist_t *);
  687 _LIBZFS_H int zfs_create_ancestors(libzfs_handle_t *, const char *);
  688 _LIBZFS_H int zfs_destroy(zfs_handle_t *, boolean_t);
  689 _LIBZFS_H int zfs_destroy_snaps(zfs_handle_t *, char *, boolean_t);
  690 _LIBZFS_H int zfs_destroy_snaps_nvl(libzfs_handle_t *, nvlist_t *, boolean_t);
  691 _LIBZFS_H int zfs_destroy_snaps_nvl_os(libzfs_handle_t *, nvlist_t *);
  692 _LIBZFS_H int zfs_clone(zfs_handle_t *, const char *, nvlist_t *);
  693 _LIBZFS_H int zfs_snapshot(libzfs_handle_t *, const char *, boolean_t,
  694     nvlist_t *);
  695 _LIBZFS_H int zfs_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps,
  696     nvlist_t *props);
  697 _LIBZFS_H int zfs_rollback(zfs_handle_t *, zfs_handle_t *, boolean_t);
  698 
  699 typedef struct renameflags {
  700         /* recursive rename */
  701         unsigned int recursive : 1;
  702 
  703         /* don't unmount file systems */
  704         unsigned int nounmount : 1;
  705 
  706         /* force unmount file systems */
  707         unsigned int forceunmount : 1;
  708 } renameflags_t;
  709 
  710 _LIBZFS_H int zfs_rename(zfs_handle_t *, const char *, renameflags_t);
  711 
  712 typedef struct sendflags {
  713         /* Amount of extra information to print. */
  714         int verbosity;
  715 
  716         /* recursive send  (ie, -R) */
  717         boolean_t replicate;
  718 
  719         /* for recursive send, skip sending missing snapshots */
  720         boolean_t skipmissing;
  721 
  722         /* for incrementals, do all intermediate snapshots */
  723         boolean_t doall;
  724 
  725         /* if dataset is a clone, do incremental from its origin */
  726         boolean_t fromorigin;
  727 
  728         /* field no longer used, maintained for backwards compatibility */
  729         boolean_t pad;
  730 
  731         /* send properties (ie, -p) */
  732         boolean_t props;
  733 
  734         /* do not send (no-op, ie. -n) */
  735         boolean_t dryrun;
  736 
  737         /* parsable verbose output (ie. -P) */
  738         boolean_t parsable;
  739 
  740         /* show progress (ie. -v) */
  741         boolean_t progress;
  742 
  743         /* show progress as process title (ie. -V) */
  744         boolean_t progressastitle;
  745 
  746         /* large blocks (>128K) are permitted */
  747         boolean_t largeblock;
  748 
  749         /* WRITE_EMBEDDED records of type DATA are permitted */
  750         boolean_t embed_data;
  751 
  752         /* compressed WRITE records are permitted */
  753         boolean_t compress;
  754 
  755         /* raw encrypted records are permitted */
  756         boolean_t raw;
  757 
  758         /* only send received properties (ie. -b) */
  759         boolean_t backup;
  760 
  761         /* include snapshot holds in send stream */
  762         boolean_t holds;
  763 
  764         /* stream represents a partially received dataset */
  765         boolean_t saved;
  766 } sendflags_t;
  767 
  768 typedef boolean_t (snapfilter_cb_t)(zfs_handle_t *, void *);
  769 
  770 _LIBZFS_H int zfs_send(zfs_handle_t *, const char *, const char *,
  771     sendflags_t *, int, snapfilter_cb_t, void *, nvlist_t **);
  772 _LIBZFS_H int zfs_send_one(zfs_handle_t *, const char *, int, sendflags_t *,
  773     const char *);
  774 _LIBZFS_H int zfs_send_progress(zfs_handle_t *, int, uint64_t *, uint64_t *);
  775 _LIBZFS_H int zfs_send_resume(libzfs_handle_t *, sendflags_t *, int outfd,
  776     const char *);
  777 _LIBZFS_H int zfs_send_saved(zfs_handle_t *, sendflags_t *, int, const char *);
  778 _LIBZFS_H nvlist_t *zfs_send_resume_token_to_nvlist(libzfs_handle_t *hdl,
  779     const char *token);
  780 
  781 _LIBZFS_H int zfs_promote(zfs_handle_t *);
  782 _LIBZFS_H int zfs_hold(zfs_handle_t *, const char *, const char *,
  783     boolean_t, int);
  784 _LIBZFS_H int zfs_hold_nvl(zfs_handle_t *, int, nvlist_t *);
  785 _LIBZFS_H int zfs_release(zfs_handle_t *, const char *, const char *,
  786     boolean_t);
  787 _LIBZFS_H int zfs_get_holds(zfs_handle_t *, nvlist_t **);
  788 _LIBZFS_H uint64_t zvol_volsize_to_reservation(zpool_handle_t *, uint64_t,
  789     nvlist_t *);
  790 
  791 typedef int (*zfs_userspace_cb_t)(void *arg, const char *domain,
  792     uid_t rid, uint64_t space);
  793 
  794 _LIBZFS_H int zfs_userspace(zfs_handle_t *, zfs_userquota_prop_t,
  795     zfs_userspace_cb_t, void *);
  796 
  797 _LIBZFS_H int zfs_get_fsacl(zfs_handle_t *, nvlist_t **);
  798 _LIBZFS_H int zfs_set_fsacl(zfs_handle_t *, boolean_t, nvlist_t *);
  799 
  800 typedef struct recvflags {
  801         /* print informational messages (ie, -v was specified) */
  802         boolean_t verbose;
  803 
  804         /* the destination is a prefix, not the exact fs (ie, -d) */
  805         boolean_t isprefix;
  806 
  807         /*
  808          * Only the tail of the sent snapshot path is appended to the
  809          * destination to determine the received snapshot name (ie, -e).
  810          */
  811         boolean_t istail;
  812 
  813         /* do not actually do the recv, just check if it would work (ie, -n) */
  814         boolean_t dryrun;
  815 
  816         /* rollback/destroy filesystems as necessary (eg, -F) */
  817         boolean_t force;
  818 
  819         /* set "canmount=off" on all modified filesystems */
  820         boolean_t canmountoff;
  821 
  822         /*
  823          * Mark the file systems as "resumable" and do not destroy them if the
  824          * receive is interrupted
  825          */
  826         boolean_t resumable;
  827 
  828         /* byteswap flag is used internally; callers need not specify */
  829         boolean_t byteswap;
  830 
  831         /* do not mount file systems as they are extracted (private) */
  832         boolean_t nomount;
  833 
  834         /* Was holds flag set in the compound header? */
  835         boolean_t holds;
  836 
  837         /* skip receive of snapshot holds */
  838         boolean_t skipholds;
  839 
  840         /* mount the filesystem unless nomount is specified */
  841         boolean_t domount;
  842 
  843         /* force unmount while recv snapshot (private) */
  844         boolean_t forceunmount;
  845 
  846         /* use this recv to check (and heal if needed) an existing snapshot */
  847         boolean_t heal;
  848 } recvflags_t;
  849 
  850 _LIBZFS_H int zfs_receive(libzfs_handle_t *, const char *, nvlist_t *,
  851     recvflags_t *, int, avl_tree_t *);
  852 
  853 typedef enum diff_flags {
  854         ZFS_DIFF_PARSEABLE = 1 << 0,
  855         ZFS_DIFF_TIMESTAMP = 1 << 1,
  856         ZFS_DIFF_CLASSIFY = 1 << 2,
  857         ZFS_DIFF_NO_MANGLE = 1 << 3
  858 } diff_flags_t;
  859 
  860 _LIBZFS_H int zfs_show_diffs(zfs_handle_t *, int, const char *, const char *,
  861     int);
  862 
  863 /*
  864  * Miscellaneous functions.
  865  */
  866 _LIBZFS_H const char *zfs_type_to_name(zfs_type_t);
  867 _LIBZFS_H void zfs_refresh_properties(zfs_handle_t *);
  868 _LIBZFS_H int zfs_name_valid(const char *, zfs_type_t);
  869 _LIBZFS_H zfs_handle_t *zfs_path_to_zhandle(libzfs_handle_t *, const char *,
  870     zfs_type_t);
  871 _LIBZFS_H int zfs_parent_name(zfs_handle_t *, char *, size_t);
  872 _LIBZFS_H boolean_t zfs_dataset_exists(libzfs_handle_t *, const char *,
  873     zfs_type_t);
  874 _LIBZFS_H int zfs_spa_version(zfs_handle_t *, int *);
  875 _LIBZFS_H boolean_t zfs_bookmark_exists(const char *path);
  876 
  877 /*
  878  * Mount support functions.
  879  */
  880 _LIBZFS_H boolean_t is_mounted(libzfs_handle_t *, const char *special, char **);
  881 _LIBZFS_H boolean_t zfs_is_mounted(zfs_handle_t *, char **);
  882 _LIBZFS_H int zfs_mount(zfs_handle_t *, const char *, int);
  883 _LIBZFS_H int zfs_mount_at(zfs_handle_t *, const char *, int, const char *);
  884 _LIBZFS_H int zfs_unmount(zfs_handle_t *, const char *, int);
  885 _LIBZFS_H int zfs_unmountall(zfs_handle_t *, int);
  886 _LIBZFS_H int zfs_mount_delegation_check(void);
  887 
  888 #if defined(__linux__) || defined(__APPLE__)
  889 _LIBZFS_H int zfs_parse_mount_options(const char *mntopts,
  890     unsigned long *mntflags, unsigned long *zfsflags, int sloppy, char *badopt,
  891     char *mtabopt);
  892 _LIBZFS_H void zfs_adjust_mount_options(zfs_handle_t *zhp, const char *mntpoint,
  893     char *mntopts, char *mtabopt);
  894 #endif
  895 
  896 /*
  897  * Share support functions.
  898  *
  899  * enum sa_protocol * lists are terminated with SA_NO_PROTOCOL,
  900  * NULL means "all/any known to this libzfs".
  901  */
  902 #define SA_NO_PROTOCOL -1
  903 
  904 _LIBZFS_H boolean_t zfs_is_shared(zfs_handle_t *zhp, char **where,
  905     const enum sa_protocol *proto);
  906 _LIBZFS_H int zfs_share(zfs_handle_t *zhp, const enum sa_protocol *proto);
  907 _LIBZFS_H int zfs_unshare(zfs_handle_t *zhp, const char *mountpoint,
  908     const enum sa_protocol *proto);
  909 _LIBZFS_H int zfs_unshareall(zfs_handle_t *zhp,
  910     const enum sa_protocol *proto);
  911 _LIBZFS_H void zfs_commit_shares(const enum sa_protocol *proto);
  912 _LIBZFS_H void zfs_truncate_shares(const enum sa_protocol *proto);
  913 
  914 _LIBZFS_H int zfs_nicestrtonum(libzfs_handle_t *, const char *, uint64_t *);
  915 
  916 /*
  917  * Utility functions to run an external process.
  918  */
  919 #define STDOUT_VERBOSE  0x01
  920 #define STDERR_VERBOSE  0x02
  921 #define NO_DEFAULT_PATH 0x04 /* Don't use $PATH to lookup the command */
  922 
  923 _LIBZFS_H int libzfs_run_process(const char *, char **, int);
  924 _LIBZFS_H int libzfs_run_process_get_stdout(const char *, char *[], char *[],
  925     char **[], int *);
  926 _LIBZFS_H int libzfs_run_process_get_stdout_nopath(const char *, char *[],
  927     char *[], char **[], int *);
  928 
  929 _LIBZFS_H void libzfs_free_str_array(char **, int);
  930 
  931 _LIBZFS_H boolean_t libzfs_envvar_is_set(const char *);
  932 
  933 /*
  934  * Utility functions for zfs version
  935  */
  936 _LIBZFS_H const char *zfs_version_userland(void);
  937 _LIBZFS_H char *zfs_version_kernel(void);
  938 _LIBZFS_H int zfs_version_print(void);
  939 
  940 /*
  941  * Given a device or file, determine if it is part of a pool.
  942  */
  943 _LIBZFS_H int zpool_in_use(libzfs_handle_t *, int, pool_state_t *, char **,
  944     boolean_t *);
  945 
  946 /*
  947  * Label manipulation.
  948  */
  949 _LIBZFS_H int zpool_clear_label(int);
  950 _LIBZFS_H int zpool_set_bootenv(zpool_handle_t *, const nvlist_t *);
  951 _LIBZFS_H int zpool_get_bootenv(zpool_handle_t *, nvlist_t **);
  952 
  953 /*
  954  * Management interfaces for SMB ACL files
  955  */
  956 
  957 _LIBZFS_H int zfs_smb_acl_add(libzfs_handle_t *, char *, char *, char *);
  958 _LIBZFS_H int zfs_smb_acl_remove(libzfs_handle_t *, char *, char *, char *);
  959 _LIBZFS_H int zfs_smb_acl_purge(libzfs_handle_t *, char *, char *);
  960 _LIBZFS_H int zfs_smb_acl_rename(libzfs_handle_t *, char *, char *, char *,
  961     char *);
  962 
  963 /*
  964  * Enable and disable datasets within a pool by mounting/unmounting and
  965  * sharing/unsharing them.
  966  */
  967 _LIBZFS_H int zpool_enable_datasets(zpool_handle_t *, const char *, int);
  968 _LIBZFS_H int zpool_disable_datasets(zpool_handle_t *, boolean_t);
  969 _LIBZFS_H void zpool_disable_datasets_os(zpool_handle_t *, boolean_t);
  970 _LIBZFS_H void zpool_disable_volume_os(const char *);
  971 
  972 /*
  973  * Parse a features file for -o compatibility
  974  */
  975 typedef enum {
  976         ZPOOL_COMPATIBILITY_OK,
  977         ZPOOL_COMPATIBILITY_WARNTOKEN,
  978         ZPOOL_COMPATIBILITY_BADTOKEN,
  979         ZPOOL_COMPATIBILITY_BADFILE,
  980         ZPOOL_COMPATIBILITY_NOFILES
  981 } zpool_compat_status_t;
  982 
  983 _LIBZFS_H zpool_compat_status_t zpool_load_compat(const char *,
  984     boolean_t *, char *, size_t);
  985 
  986 #ifdef __FreeBSD__
  987 
  988 /*
  989  * Attach/detach the given filesystem to/from the given jail.
  990  */
  991 _LIBZFS_H int zfs_jail(zfs_handle_t *zhp, int jailid, int attach);
  992 
  993 /*
  994  * Set loader options for next boot.
  995  */
  996 _LIBZFS_H int zpool_nextboot(libzfs_handle_t *, uint64_t, uint64_t,
  997     const char *);
  998 
  999 #endif /* __FreeBSD__ */
 1000 
 1001 #ifdef __linux__
 1002 
 1003 /*
 1004  * Add or delete the given filesystem to/from the given user namespace.
 1005  */
 1006 _LIBZFS_H int zfs_userns(zfs_handle_t *zhp, const char *nspath, int attach);
 1007 
 1008 #endif
 1009 
 1010 #ifdef  __cplusplus
 1011 }
 1012 #endif
 1013 
 1014 #endif  /* _LIBZFS_H */

Cache object: 998e6d348381e505f945eadab5ab197c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.