Print this page
2882 implement libzfs_core
2883 changing "canmount" property to "on" should not always remount dataset
2900 "zfs snapshot" should be able to create multiple, arbitrary snapshots at once
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Chris Siden <christopher.siden@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Bill Pijewski <wdp@joyent.com>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>

@@ -179,14 +179,12 @@
                         const char *perm = nvpair_name(permpair);
                         uint64_t n = 0;
 
                         VERIFY(zap_update(mos, jumpobj,
                             perm, 8, 1, &n, tx) == 0);
-                        spa_history_log_internal(LOG_DS_PERM_UPDATE,
-                            dd->dd_pool->dp_spa, tx,
-                            "%s %s dataset = %llu", whokey, perm,
-                            dd->dd_phys->dd_head_dataset_obj);
+                        spa_history_log_internal_dd(dd, "permission update", tx,
+                            "%s %s", whokey, perm);
                 }
         }
 }
 
 static void

@@ -211,14 +209,12 @@
                         if (zap_lookup(mos, zapobj, whokey, 8,
                             1, &jumpobj) == 0) {
                                 (void) zap_remove(mos, zapobj, whokey, tx);
                                 VERIFY(0 == zap_destroy(mos, jumpobj, tx));
                         }
-                        spa_history_log_internal(LOG_DS_PERM_WHO_REMOVE,
-                            dd->dd_pool->dp_spa, tx,
-                            "%s dataset = %llu", whokey,
-                            dd->dd_phys->dd_head_dataset_obj);
+                        spa_history_log_internal_dd(dd, "permission who remove",
+                            tx, "%s", whokey);
                         continue;
                 }
 
                 if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0)
                         continue;

@@ -232,14 +228,12 @@
                                 (void) zap_remove(mos, zapobj,
                                     whokey, tx);
                                 VERIFY(0 == zap_destroy(mos,
                                     jumpobj, tx));
                         }
-                        spa_history_log_internal(LOG_DS_PERM_REMOVE,
-                            dd->dd_pool->dp_spa, tx,
-                            "%s %s dataset = %llu", whokey, perm,
-                            dd->dd_phys->dd_head_dataset_obj);
+                        spa_history_log_internal_dd(dd, "permission remove", tx,
+                            "%s %s", whokey, perm);
                 }
         }
 }
 
 int

@@ -522,16 +516,14 @@
                     ZFS_DELEG_GROUP_SETS, checkflag, &id, avl);
         }
 }
 
 /*
- * Check if user has requested permission.  If descendent is set, must have
- * descendent perms.
+ * Check if user has requested permission.
  */
 int
-dsl_deleg_access_impl(dsl_dataset_t *ds, boolean_t descendent, const char *perm,
-    cred_t *cr)
+dsl_deleg_access_impl(dsl_dataset_t *ds, const char *perm, cred_t *cr)
 {
         dsl_dir_t *dd;
         dsl_pool_t *dp;
         void *cookie;
         int     error;

@@ -548,11 +540,11 @@
 
         if (spa_version(dmu_objset_spa(dp->dp_meta_objset)) <
             SPA_VERSION_DELEGATED_PERMS)
                 return (EPERM);
 
-        if (dsl_dataset_is_snapshot(ds) || descendent) {
+        if (dsl_dataset_is_snapshot(ds)) {
                 /*
                  * Snapshots are treated as descendents only,
                  * local permissions do not apply.
                  */
                 checkflag = ZFS_DELEG_DESCENDENT;

@@ -641,11 +633,11 @@
 
         error = dsl_dataset_hold(dsname, FTAG, &ds);
         if (error)
                 return (error);
 
-        error = dsl_deleg_access_impl(ds, B_FALSE, perm, cr);
+        error = dsl_deleg_access_impl(ds, perm, cr);
         dsl_dataset_rele(ds, FTAG);
 
         return (error);
 }