]> git.proxmox.com Git - mirror_zfs.git/blobdiff - lib/libzfs/libzfs_pool.c
Fix error handling for "zpool online -e".
[mirror_zfs.git] / lib / libzfs / libzfs_pool.c
index bb184ed688dd0f444583fdd3ae4f39c384cb6cab..08b83c8c16f834dd546ce5c88677855a0cb085e6 100644 (file)
@@ -2083,15 +2083,14 @@ zpool_get_physpath(zpool_handle_t *zhp, char *physpath, size_t phypath_size)
  * the disk to use the new unallocated space.
  */
 static int
-zpool_relabel_disk(libzfs_handle_t *hdl, const char *path)
+zpool_relabel_disk(libzfs_handle_t *hdl, const char *path, const char *msg)
 {
-       char errbuf[1024];
        int fd, error;
 
        if ((fd = open(path, O_RDWR|O_DIRECT)) < 0) {
                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot "
                    "relabel '%s': unable to open device: %d"), path, errno);
-               return (zfs_error(hdl, EZFS_OPENFAILED, errbuf));
+               return (zfs_error(hdl, EZFS_OPENFAILED, msg));
        }
 
        /*
@@ -2104,7 +2103,7 @@ zpool_relabel_disk(libzfs_handle_t *hdl, const char *path)
        if (error && error != VT_ENOSPC) {
                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot "
                    "relabel '%s': unable to read disk capacity"), path);
-               return (zfs_error(hdl, EZFS_NOCAP, errbuf));
+               return (zfs_error(hdl, EZFS_NOCAP, msg));
        }
        return (0);
 }
@@ -2122,6 +2121,7 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
        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),
@@ -2162,7 +2162,9 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags,
 
                if (wholedisk) {
                        pathname += strlen(DISK_ROOT) + 1;
-                       (void) zpool_relabel_disk(hdl, pathname);
+                       error = zpool_relabel_disk(hdl, pathname, msg);
+                       if (error != 0)
+                               return (error);
                }
        }