Print this page
8331 zfs_unshare returns wrong error code for smb unshare failure
Reviewed by: Marcel Telka <marcel@telka.sk>
Reviewed by: Toomas Soome <tsoome@me.com>

@@ -22,10 +22,11 @@
 /*
  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2014, 2016 by Delphix. All rights reserved.
  * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>
+ * Copyright 2017 RackTop Systems.
  */
 
 /*
  * Routines to manage ZFS mounts.  We separate all the nasty routines that have
  * to deal with the OS.  The following functions are the main entry points --

@@ -89,11 +90,11 @@
 static int zfs_share_proto(zfs_handle_t *, zfs_share_proto_t *);
 zfs_share_type_t zfs_is_shared_proto(zfs_handle_t *, char **,
     zfs_share_proto_t);
 
 /*
- * The share protocols table must be in the same order as the zfs_share_prot_t
+ * The share protocols table must be in the same order as the zfs_share_proto_t
  * enum in libzfs_impl.h
  */
 typedef struct {
         zfs_prop_t p_prop;
         char *p_name;

@@ -913,11 +914,11 @@
          * time the set is known.
          */
         if ((err = zfs_init_libshare_arg(hdl, SA_INIT_ONE_SHARE_FROM_NAME,
             (void *)name)) != SA_OK) {
                 free(mntpt);    /* don't need the copy anymore */
-                return (zfs_error_fmt(hdl, EZFS_UNSHARENFSFAILED,
+                return (zfs_error_fmt(hdl, proto_table[proto].p_unshare_err,
                     dgettext(TEXT_DOMAIN, "cannot unshare '%s': %s"),
                     name, _sa_errorstr(err)));
         }
 
         share = zfs_sa_find_share(hdl->libzfs_sharehdl, mntpt);

@@ -924,16 +925,17 @@
         free(mntpt);    /* don't need the copy anymore */
 
         if (share != NULL) {
                 err = zfs_sa_disable_share(share, proto_table[proto].p_name);
                 if (err != SA_OK) {
-                        return (zfs_error_fmt(hdl, EZFS_UNSHARENFSFAILED,
+                        return (zfs_error_fmt(hdl,
+                            proto_table[proto].p_unshare_err,
                             dgettext(TEXT_DOMAIN, "cannot unshare '%s': %s"),
                             name, _sa_errorstr(err)));
                 }
         } else {
-                return (zfs_error_fmt(hdl, EZFS_UNSHARENFSFAILED,
+                return (zfs_error_fmt(hdl, proto_table[proto].p_unshare_err,
                     dgettext(TEXT_DOMAIN, "cannot unshare '%s': not found"),
                     name));
         }
         return (0);
 }