Author: avg
Date: Wed Jun 24 14:32:05 2015
New Revision: 284755
URL: https://svnweb.freebsd.org/changeset/base/284755

Log:
  MFC r284309: zfs clone should not mount the clone if canmount == noauto

Modified:
  stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
Directory Properties:
  stable/9/cddl/contrib/opensolaris/cmd/zfs/   (props changed)

Modified: stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
==============================================================================
--- stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c        Wed Jun 24 
14:30:04 2015        (r284754)
+++ stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c        Wed Jun 24 
14:32:05 2015        (r284755)
@@ -589,6 +589,17 @@ finish_progress(char *done)
        pt_header = NULL;
 }
 /*
+ * Check if the dataset is mountable and should be automatically mounted.
+ */
+static boolean_t
+should_auto_mount(zfs_handle_t *zhp)
+{
+       if (!zfs_prop_valid_for_type(ZFS_PROP_CANMOUNT, zfs_get_type(zhp)))
+               return (B_FALSE);
+       return (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_ON);
+}
+
+/*
  * zfs clone [-p] [-o prop=value] ... <snap> <fs | vol>
  *
  * Given an existing dataset, create a writable copy whose initial contents
@@ -673,9 +684,22 @@ zfs_do_clone(int argc, char **argv)
 
                clone = zfs_open(g_zfs, argv[1], ZFS_TYPE_DATASET);
                if (clone != NULL) {
-                       if (zfs_get_type(clone) != ZFS_TYPE_VOLUME)
-                               if ((ret = zfs_mount(clone, NULL, 0)) == 0)
-                                       ret = zfs_share(clone);
+                       /*
+                        * If the user doesn't want the dataset
+                        * automatically mounted, then skip the mount/share
+                        * step.
+                        */
+                       if (should_auto_mount(clone)) {
+                               if ((ret = zfs_mount(clone, NULL, 0)) != 0) {
+                                       (void) fprintf(stderr, gettext("clone "
+                                           "successfully created, "
+                                           "but not mounted\n"));
+                               } else if ((ret = zfs_share(clone)) != 0) {
+                                       (void) fprintf(stderr, gettext("clone "
+                                           "successfully created, "
+                                           "but not shared\n"));
+                               }
+                       }
                        zfs_close(clone);
                }
        }
@@ -721,7 +745,6 @@ zfs_do_create(int argc, char **argv)
        int ret = 1;
        nvlist_t *props;
        uint64_t intval;
-       int canmount = ZFS_CANMOUNT_OFF;
 
        if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0)
                nomem();
@@ -853,19 +876,15 @@ zfs_do_create(int argc, char **argv)
                goto error;
 
        ret = 0;
-       /*
-        * if the user doesn't want the dataset automatically mounted,
-        * then skip the mount/share step
-        */
-       if (zfs_prop_valid_for_type(ZFS_PROP_CANMOUNT, type))
-               canmount = zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT);
 
        /*
         * Mount and/or share the new filesystem as appropriate.  We provide a
         * verbose error message to let the user know that their filesystem was
         * in fact created, even if we failed to mount or share it.
+        * If the user doesn't want the dataset automatically mounted,
+        * then skip the mount/share step altogether.
         */
-       if (canmount == ZFS_CANMOUNT_ON) {
+       if (should_auto_mount(zhp)) {
                if (zfs_mount(zhp, NULL, 0) != 0) {
                        (void) fprintf(stderr, gettext("filesystem "
                            "successfully created, but not mounted\n"));
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to