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,192 **** 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); } } } static void --- 179,190 ---- 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_dd(dd, "permission update", tx, ! "%s %s", whokey, perm); } } } static void
*** 211,224 **** 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); continue; } if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0) continue; --- 209,220 ---- 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_dd(dd, "permission who remove", ! tx, "%s", whokey); continue; } if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0) continue;
*** 232,245 **** (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); } } } int --- 228,239 ---- (void) zap_remove(mos, zapobj, whokey, tx); VERIFY(0 == zap_destroy(mos, jumpobj, tx)); } ! spa_history_log_internal_dd(dd, "permission remove", tx, ! "%s %s", whokey, perm); } } } int
*** 522,537 **** ZFS_DELEG_GROUP_SETS, checkflag, &id, avl); } } /* ! * Check if user has requested permission. If descendent is set, must have ! * descendent perms. */ int ! dsl_deleg_access_impl(dsl_dataset_t *ds, boolean_t descendent, const char *perm, ! cred_t *cr) { dsl_dir_t *dd; dsl_pool_t *dp; void *cookie; int error; --- 516,529 ---- ZFS_DELEG_GROUP_SETS, checkflag, &id, avl); } } /* ! * Check if user has requested permission. */ int ! 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,558 **** if (spa_version(dmu_objset_spa(dp->dp_meta_objset)) < SPA_VERSION_DELEGATED_PERMS) return (EPERM); ! if (dsl_dataset_is_snapshot(ds) || descendent) { /* * Snapshots are treated as descendents only, * local permissions do not apply. */ checkflag = ZFS_DELEG_DESCENDENT; --- 540,550 ---- if (spa_version(dmu_objset_spa(dp->dp_meta_objset)) < SPA_VERSION_DELEGATED_PERMS) return (EPERM); ! if (dsl_dataset_is_snapshot(ds)) { /* * Snapshots are treated as descendents only, * local permissions do not apply. */ checkflag = ZFS_DELEG_DESCENDENT;
*** 641,651 **** error = dsl_dataset_hold(dsname, FTAG, &ds); if (error) return (error); ! error = dsl_deleg_access_impl(ds, B_FALSE, perm, cr); dsl_dataset_rele(ds, FTAG); return (error); } --- 633,643 ---- error = dsl_dataset_hold(dsname, FTAG, &ds); if (error) return (error); ! error = dsl_deleg_access_impl(ds, perm, cr); dsl_dataset_rele(ds, FTAG); return (error); }