Author: mav
Date: Thu Aug  2 19:09:13 2018
New Revision: 337161
URL: https://svnweb.freebsd.org/changeset/base/337161

Log:
  9512 zfs remap poolname@snapname coredumps
  
  Only filesystems and volumes are valid "zfs remap" parameters: when passed
  a snapshot name zfs_remap_indirects() does not handle the EINVAL returned
  from libzfs_core, which results in failing an assertion and consequently
  crashing.
  
  illumos/illumos-gate@0b2e8253986c5c761129b58cfdac46d204903de1
  
  Reviewed by: Matthew Ahrens <[email protected]>
  Reviewed by: John Wren Kennedy <[email protected]>
  Reviewed by: Sara Hartse <[email protected]>
  Approved by: Matt Ahrens <[email protected]>
  Author:     loli10K <[email protected]>

Modified:
  vendor/illumos/dist/cmd/zfs/zfs_main.c
  vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c

Modified: vendor/illumos/dist/cmd/zfs/zfs_main.c
==============================================================================
--- vendor/illumos/dist/cmd/zfs/zfs_main.c      Thu Aug  2 18:55:55 2018        
(r337160)
+++ vendor/illumos/dist/cmd/zfs/zfs_main.c      Thu Aug  2 19:09:13 2018        
(r337161)
@@ -6924,11 +6924,28 @@ zfs_do_diff(int argc, char **argv)
        return (err != 0);
 }
 
+/*
+ * zfs remap <filesystem | volume>
+ *
+ * Remap the indirect blocks in the given fileystem or volume.
+ */
 static int
 zfs_do_remap(int argc, char **argv)
 {
        const char *fsname;
        int err = 0;
+       int c;
+
+       /* check options */
+       while ((c = getopt(argc, argv, "")) != -1) {
+               switch (c) {
+               case '?':
+                       (void) fprintf(stderr,
+                           gettext("invalid option '%c'\n"), optopt);
+                       usage(B_FALSE);
+               }
+       }
+
        if (argc != 2) {
                (void) fprintf(stderr, gettext("wrong number of arguments\n"));
                usage(B_FALSE);

Modified: vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c      Thu Aug  2 
18:55:55 2018        (r337160)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c      Thu Aug  2 
19:09:13 2018        (r337161)
@@ -3877,12 +3877,24 @@ zfs_remap_indirects(libzfs_handle_t *hdl, const char *
        char errbuf[1024];
 
        (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
-           "cannot remap filesystem '%s' "), fs);
+           "cannot remap dataset '%s'"), fs);
 
        err = lzc_remap(fs);
 
        if (err != 0) {
-               (void) zfs_standard_error(hdl, err, errbuf);
+               switch (err) {
+               case ENOTSUP:
+                       zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+                           "pool must be upgraded"));
+                       (void) zfs_error(hdl, EZFS_BADVERSION, errbuf);
+                       break;
+               case EINVAL:
+                       (void) zfs_error(hdl, EZFS_BADTYPE, errbuf);
+                       break;
+               default:
+                       (void) zfs_standard_error(hdl, err, errbuf);
+                       break;
+               }
        }
 
        return (err);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to