]> git.proxmox.com Git - mirror_zfs.git/commitdiff
libzfs: FreeBSD doesn't resize partitions for you
authorRyan Moeller <ryan@iXsystems.com>
Fri, 11 Mar 2022 16:52:49 +0000 (11:52 -0500)
committerGitHub <noreply@github.com>
Fri, 11 Mar 2022 16:52:49 +0000 (08:52 -0800)
This code can be failure prone on FreeBSD, where zfsd will pass a guid
as the vdev path to online.  The guid causes zfs_resolve_shortname to
fail because it expects a path.  We can just skip the whole ordeal.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@ixsystems.com>
Closes #12083

lib/libzfs/libzfs_pool.c

index fe58221a0268b70b3ac4c3aca315203b66691307..b632ff74a3b77b9f6039ff934f474825dd6adb71 100644 (file)
@@ -3137,11 +3137,9 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
 {
        zfs_cmd_t zc = {"\0"};
        char msg[1024];
-       char *pathname;
        nvlist_t *tgt;
        boolean_t avail_spare, l2cache, islog;
        libzfs_handle_t *hdl = zhp->zpool_hdl;
-       int error;
 
        if (flags & ZFS_ONLINE_EXPAND) {
                (void) snprintf(msg, sizeof (msg),
@@ -3161,6 +3159,8 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
        if (avail_spare)
                return (zfs_error(hdl, EZFS_ISSPARE, msg));
 
+#ifndef __FreeBSD__
+       char *pathname;
        if ((flags & ZFS_ONLINE_EXPAND ||
            zpool_get_prop_int(zhp, ZPOOL_PROP_AUTOEXPAND, NULL)) &&
            nvlist_lookup_string(tgt, ZPOOL_CONFIG_PATH, &pathname) == 0) {
@@ -3181,6 +3181,7 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
                if (wholedisk) {
                        const char *fullpath = path;
                        char buf[MAXPATHLEN];
+                       int error;
 
                        if (path[0] != '/') {
                                error = zfs_resolve_shortname(path, buf,
@@ -3197,6 +3198,7 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
                                return (error);
                }
        }
+#endif
 
        zc.zc_cookie = VDEV_STATE_ONLINE;
        zc.zc_obj = flags;