From 806739f991aa0d3fc5a36989fff8d8ab8fddf78f Mon Sep 17 00:00:00 2001 From: Damian Szuberski Date: Mon, 21 Feb 2022 04:20:00 +0100 Subject: [PATCH] Correct compilation errors reported by GCC 10/11 New `zfs_type_t` value `ZFS_TYPE_INVALID` is introduced. Variable initialization is now possible to make GCC happy. Reviewed by: Brian Behlendorf Signed-off-by: szubersk Closes #12167 Closes #13103 --- cmd/zfs/zfs_iter.c | 8 +++----- cmd/zpool_influxdb/zpool_influxdb.c | 2 +- include/sys/fs/zfs.h | 1 + lib/libzfs/libzfs_dataset.c | 7 ++----- lib/libzfs/libzfs_sendrecv.c | 7 ++++--- lib/libzfs/os/freebsd/libzfs_compat.c | 11 +++++++---- lib/libzutil/os/linux/zutil_import_os.c | 3 +++ module/zfs/zcp_get.c | 12 +++++------- 8 files changed, 26 insertions(+), 25 deletions(-) diff --git a/cmd/zfs/zfs_iter.c b/cmd/zfs/zfs_iter.c index 69b802f77..8b6a49a79 100644 --- a/cmd/zfs/zfs_iter.c +++ b/cmd/zfs/zfs_iter.c @@ -453,23 +453,21 @@ zfs_for_each(int argc, char **argv, int flags, zfs_type_t types, cb.cb_flags |= ZFS_ITER_RECURSE; ret = zfs_iter_root(g_zfs, zfs_callback, &cb); } else { - int i; - zfs_handle_t *zhp; - zfs_type_t argtype; + zfs_handle_t *zhp = NULL; + zfs_type_t argtype = types; /* * If we're recursive, then we always allow filesystems as * arguments. If we also are interested in snapshots or * bookmarks, then we can take volumes as well. */ - argtype = types; if (flags & ZFS_ITER_RECURSE) { argtype |= ZFS_TYPE_FILESYSTEM; if (types & (ZFS_TYPE_SNAPSHOT | ZFS_TYPE_BOOKMARK)) argtype |= ZFS_TYPE_VOLUME; } - for (i = 0; i < argc; i++) { + for (int i = 0; i < argc; i++) { if (flags & ZFS_ITER_ARGS_CAN_BE_PATHS) { zhp = zfs_path_to_zhandle(g_zfs, argv[i], argtype); diff --git a/cmd/zpool_influxdb/zpool_influxdb.c b/cmd/zpool_influxdb/zpool_influxdb.c index 2d6859efb..57bb2ee7b 100644 --- a/cmd/zpool_influxdb/zpool_influxdb.c +++ b/cmd/zpool_influxdb/zpool_influxdb.c @@ -278,7 +278,7 @@ get_vdev_name(nvlist_t *nvroot, const char *parent_name) vdev_type); } else { (void) snprintf(vdev_name, sizeof (vdev_name), - "%s/%s-%llu", + "%.220s/%s-%llu", parent_name, vdev_type, (u_longlong_t)vdev_id); } return (vdev_name); diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h index 6c0463e13..6e85c4b7b 100644 --- a/include/sys/fs/zfs.h +++ b/include/sys/fs/zfs.h @@ -50,6 +50,7 @@ extern "C" { * combined into masks that can be passed to various functions. */ typedef enum { + ZFS_TYPE_INVALID = 0, ZFS_TYPE_FILESYSTEM = (1 << 0), ZFS_TYPE_SNAPSHOT = (1 << 1), ZFS_TYPE_VOLUME = (1 << 2), diff --git a/lib/libzfs/libzfs_dataset.c b/lib/libzfs/libzfs_dataset.c index ba120c244..3236ada25 100644 --- a/lib/libzfs/libzfs_dataset.c +++ b/lib/libzfs/libzfs_dataset.c @@ -3972,13 +3972,10 @@ zfs_clone(zfs_handle_t *zhp, const char *target, nvlist_t *props) /* do the clone */ if (props) { - zfs_type_t type; + zfs_type_t type = ZFS_TYPE_FILESYSTEM; - if (ZFS_IS_VOLUME(zhp)) { + if (ZFS_IS_VOLUME(zhp)) type = ZFS_TYPE_VOLUME; - } else { - type = ZFS_TYPE_FILESYSTEM; - } if ((props = zfs_valid_proplist(hdl, type, props, zoned, zhp, zhp->zpool_hdl, B_TRUE, errbuf)) == NULL) return (-1); diff --git a/lib/libzfs/libzfs_sendrecv.c b/lib/libzfs/libzfs_sendrecv.c index f6fee6074..91f595ac5 100644 --- a/lib/libzfs/libzfs_sendrecv.c +++ b/lib/libzfs/libzfs_sendrecv.c @@ -807,8 +807,9 @@ dump_ioctl(zfs_handle_t *zhp, const char *fromsnap, uint64_t fromsnap_obj, char errbuf[1024]; int error = errno; - (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, - "warning: cannot send '%s'"), zhp->zfs_name); + (void) snprintf(errbuf, sizeof (errbuf), "%s '%s'", + dgettext(TEXT_DOMAIN, "warning: cannot send"), + zhp->zfs_name); if (debugnv != NULL) { fnvlist_add_uint64(thisdbg, "error", error); @@ -4196,7 +4197,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, nvlist_t *rcvprops = NULL; /* props received from the send stream */ nvlist_t *oxprops = NULL; /* override (-o) and exclude (-x) props */ nvlist_t *origprops = NULL; /* original props (if destination exists) */ - zfs_type_t type; + zfs_type_t type = ZFS_TYPE_INVALID; boolean_t toplevel = B_FALSE; boolean_t zoned = B_FALSE; boolean_t hastoken = B_FALSE; diff --git a/lib/libzfs/os/freebsd/libzfs_compat.c b/lib/libzfs/os/freebsd/libzfs_compat.c index cb5a27c64..ce2dcef00 100644 --- a/lib/libzfs/os/freebsd/libzfs_compat.c +++ b/lib/libzfs/os/freebsd/libzfs_compat.c @@ -199,7 +199,7 @@ execvpe(const char *name, char * const argv[], char * const envp[]) return (execvPe(name, path, argv, envp)); } -#define ERRBUFLEN 256 +#define ERRBUFLEN 1024 static __thread char errbuf[ERRBUFLEN]; @@ -207,10 +207,10 @@ const char * libzfs_error_init(int error) { char *msg = errbuf; - size_t len, msglen = ERRBUFLEN; + size_t msglen = sizeof (errbuf); if (modfind("zfs") < 0) { - len = snprintf(msg, msglen, dgettext(TEXT_DOMAIN, + size_t len = snprintf(msg, msglen, dgettext(TEXT_DOMAIN, "Failed to load %s module: "), ZFS_KMOD); msg += len; msglen -= len; @@ -285,7 +285,6 @@ zfs_jail(zfs_handle_t *zhp, int jailid, int attach) { libzfs_handle_t *hdl = zhp->zfs_hdl; zfs_cmd_t zc = {"\0"}; - char errbuf[1024]; unsigned long cmd; int ret; @@ -314,6 +313,10 @@ zfs_jail(zfs_handle_t *zhp, int jailid, int attach) zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "vdevs can not be jailed")); return (zfs_error(hdl, EZFS_BADTYPE, errbuf)); + case ZFS_TYPE_INVALID: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "invalid zfs_type_t: ZFS_TYPE_INVALID")); + return (zfs_error(hdl, EZFS_BADTYPE, errbuf)); case ZFS_TYPE_POOL: case ZFS_TYPE_FILESYSTEM: /* OK */ diff --git a/lib/libzutil/os/linux/zutil_import_os.c b/lib/libzutil/os/linux/zutil_import_os.c index 60d3369c9..0493e897b 100644 --- a/lib/libzutil/os/linux/zutil_import_os.c +++ b/lib/libzutil/os/linux/zutil_import_os.c @@ -754,6 +754,9 @@ no_dev: return (ret); #else + (void) path; + (void) ds; + (void) wholedisk; return (ENOENT); #endif } diff --git a/module/zfs/zcp_get.c b/module/zfs/zcp_get.c index 420ed3f71..af495ce85 100644 --- a/module/zfs/zcp_get.c +++ b/module/zfs/zcp_get.c @@ -76,9 +76,8 @@ get_objset_type(dsl_dataset_t *ds, zfs_type_t *type) static int get_objset_type_name(dsl_dataset_t *ds, char *str) { - int error; - zfs_type_t type; - error = get_objset_type(ds, &type); + zfs_type_t type = ZFS_TYPE_INVALID; + int error = get_objset_type(ds, &type); if (error != 0) return (error); switch (type) { @@ -230,7 +229,7 @@ get_special_prop(lua_State *state, dsl_dataset_t *ds, const char *dsname, char *strval = kmem_alloc(ZAP_MAXVALUELEN, KM_SLEEP); char setpoint[ZFS_MAX_DATASET_NAME_LEN] = "Internal error - setpoint not determined"; - zfs_type_t ds_type = -1; + zfs_type_t ds_type = ZFS_TYPE_INVALID; zprop_type_t prop_type = zfs_prop_get_type(zfs_prop); (void) get_objset_type(ds, &ds_type); @@ -497,8 +496,7 @@ get_zap_prop(lua_State *state, dsl_dataset_t *ds, zfs_prop_t zfs_prop) boolean_t prop_valid_for_ds(dsl_dataset_t *ds, zfs_prop_t zfs_prop) { - int error; - zfs_type_t zfs_type; + zfs_type_t zfs_type = ZFS_TYPE_INVALID; /* properties not supported */ if ((zfs_prop == ZFS_PROP_ISCSIOPTIONS) || @@ -509,7 +507,7 @@ prop_valid_for_ds(dsl_dataset_t *ds, zfs_prop_t zfs_prop) if ((zfs_prop == ZFS_PROP_ORIGIN) && (!dsl_dir_is_clone(ds->ds_dir))) return (B_FALSE); - error = get_objset_type(ds, &zfs_type); + int error = get_objset_type(ds, &zfs_type); if (error != 0) return (B_FALSE); return (zfs_prop_valid_for_type(zfs_prop, zfs_type, B_FALSE));