libzfs: add zfs_get_underlying_type. Stop including libzfs_impl.h in cmd

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #12116
This commit is contained in:
наб 2021-05-15 12:35:46 +02:00 committed by Brian Behlendorf
parent e618e4a4ff
commit 757df52928
6 changed files with 661 additions and 641 deletions

View File

@ -52,6 +52,8 @@
#include <zone.h> #include <zone.h>
#include <grp.h> #include <grp.h>
#include <pwd.h> #include <pwd.h>
#include <umem.h>
#include <pthread.h>
#include <signal.h> #include <signal.h>
#include <sys/list.h> #include <sys/list.h>
#include <sys/mkdev.h> #include <sys/mkdev.h>
@ -78,7 +80,6 @@
#include "zfs_iter.h" #include "zfs_iter.h"
#include "zfs_util.h" #include "zfs_util.h"
#include "zfs_comutil.h" #include "zfs_comutil.h"
#include "libzfs_impl.h"
#include "zfs_projectutil.h" #include "zfs_projectutil.h"
libzfs_handle_t *g_zfs; libzfs_handle_t *g_zfs;
@ -3315,7 +3316,7 @@ zfs_do_userspace(int argc, char **argv)
if ((zhp = zfs_path_to_zhandle(g_zfs, argv[0], ZFS_TYPE_FILESYSTEM | if ((zhp = zfs_path_to_zhandle(g_zfs, argv[0], ZFS_TYPE_FILESYSTEM |
ZFS_TYPE_SNAPSHOT)) == NULL) ZFS_TYPE_SNAPSHOT)) == NULL)
return (1); return (1);
if (zhp->zfs_head_type != ZFS_TYPE_FILESYSTEM) { if (zfs_get_underlying_type(zhp) != ZFS_TYPE_FILESYSTEM) {
(void) fprintf(stderr, gettext("operation is only applicable " (void) fprintf(stderr, gettext("operation is only applicable "
"to filesystems and their snapshots\n")); "to filesystems and their snapshots\n"));
zfs_close(zhp); zfs_close(zhp);

View File

@ -71,7 +71,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdint.h> #include <stdint.h>
#include <inttypes.h> #include <inttypes.h>
#include <libzfs_impl.h> #include <libzfs.h>
#define POOL_MEASUREMENT "zpool_stats" #define POOL_MEASUREMENT "zpool_stats"
#define SCAN_MEASUREMENT "zpool_scan_stats" #define SCAN_MEASUREMENT "zpool_scan_stats"
@ -101,9 +101,10 @@ typedef int (*stat_printer_f)(nvlist_t *, const char *, const char *);
* caller is responsible for freeing result * caller is responsible for freeing result
*/ */
static char * static char *
escape_string(char *s) escape_string(const char *s)
{ {
char *c, *d; const char *c;
char *d;
char *t = (char *)malloc(ZFS_MAX_DATASET_NAME_LEN * 2); char *t = (char *)malloc(ZFS_MAX_DATASET_NAME_LEN * 2);
if (t == NULL) { if (t == NULL) {
fprintf(stderr, "error: cannot allocate memory\n"); fprintf(stderr, "error: cannot allocate memory\n");
@ -714,7 +715,7 @@ print_stats(zpool_handle_t *zhp, void *data)
/* if not this pool return quickly */ /* if not this pool return quickly */
if (data && if (data &&
strncmp(data, zhp->zpool_name, ZFS_MAX_DATASET_NAME_LEN) != 0) { strncmp(data, zpool_get_name(zhp), ZFS_MAX_DATASET_NAME_LEN) != 0) {
zpool_close(zhp); zpool_close(zhp);
return (0); return (0);
} }
@ -742,7 +743,7 @@ print_stats(zpool_handle_t *zhp, void *data)
return (3); return (3);
} }
pool_name = escape_string(zhp->zpool_name); pool_name = escape_string(zpool_get_name(zhp));
err = print_recursive_stats(print_summary_stats, nvroot, err = print_recursive_stats(print_summary_stats, nvroot,
pool_name, NULL, 1); pool_name, NULL, 1);
/* if any of these return an error, skip the rest */ /* if any of these return an error, skip the rest */

View File

@ -22,7 +22,6 @@
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <libzfs_impl.h>
#include <libzfs.h> #include <libzfs.h>
#include <libzutil.h> #include <libzutil.h>
#include <stddef.h> #include <stddef.h>

View File

@ -468,6 +468,7 @@ extern zfs_handle_t *zfs_open(libzfs_handle_t *, const char *, int);
extern zfs_handle_t *zfs_handle_dup(zfs_handle_t *); extern zfs_handle_t *zfs_handle_dup(zfs_handle_t *);
extern void zfs_close(zfs_handle_t *); extern void zfs_close(zfs_handle_t *);
extern zfs_type_t zfs_get_type(const zfs_handle_t *); extern zfs_type_t zfs_get_type(const zfs_handle_t *);
extern zfs_type_t zfs_get_underlying_type(const zfs_handle_t *);
extern const char *zfs_get_name(const zfs_handle_t *); extern const char *zfs_get_name(const zfs_handle_t *);
extern zpool_handle_t *zfs_get_pool_handle(const zfs_handle_t *); extern zpool_handle_t *zfs_get_pool_handle(const zfs_handle_t *);
extern const char *zfs_get_pool_name(const zfs_handle_t *); extern const char *zfs_get_pool_name(const zfs_handle_t *);

File diff suppressed because it is too large Load Diff

View File

@ -3333,6 +3333,16 @@ zfs_get_type(const zfs_handle_t *zhp)
return (zhp->zfs_type); return (zhp->zfs_type);
} }
/*
* Returns the type of the given zfs handle,
* or, if a snapshot, the type of the snapshotted dataset.
*/
zfs_type_t
zfs_get_underlying_type(const zfs_handle_t *zhp)
{
return (zhp->zfs_head_type);
}
/* /*
* Is one dataset name a child dataset of another? * Is one dataset name a child dataset of another?
* *