Print this page
NEX-5366 Race between unique_insert() and unique_remove() causes ZFS fsid change
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Dan Vatca <dan.vatca@gmail.com>
6160 /usr/lib/fs/zfs/bootinstall should use bootadm
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Adam Števko <adam.stevko@gmail.com>
Reviewed by: Josef Sipek <jeffpc@josefsipek.net>
Approved by: Richard Lowe <richlowe@richlowe.net>
4185 add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R (NULL is not an int)
6171 dsl_prop_unregister() slows down dataset eviction.
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
5610 zfs clone from different source and target pools produces coredump
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
re #12585 rb4049 ZFS++ work port - refactoring to improve separation of open/closed code, bug fixes, performance improvements - open code
*** 125,139 ****
extern inline dsl_dir_phys_t *dsl_dir_phys(dsl_dir_t *dd);
static uint64_t dsl_dir_space_towrite(dsl_dir_t *dd);
- typedef struct ddulrt_arg {
- dsl_dir_t *ddulrta_dd;
- uint64_t ddlrta_txg;
- } ddulrt_arg_t;
-
static void
dsl_dir_evict_async(void *dbu)
{
dsl_dir_t *dd = dbu;
dsl_pool_t *dp = dd->dd_pool;
--- 125,134 ----
*** 732,770 ****
dsl_dataset_rele(ds, FTAG);
return (enforce);
}
- static void
- dsl_dir_update_last_remap_txg_sync(void *varg, dmu_tx_t *tx)
- {
- ddulrt_arg_t *arg = varg;
- uint64_t last_remap_txg;
- dsl_dir_t *dd = arg->ddulrta_dd;
- objset_t *mos = dd->dd_pool->dp_meta_objset;
-
- dsl_dir_zapify(dd, tx);
- if (zap_lookup(mos, dd->dd_object, DD_FIELD_LAST_REMAP_TXG,
- sizeof (last_remap_txg), 1, &last_remap_txg) != 0 ||
- last_remap_txg < arg->ddlrta_txg) {
- VERIFY0(zap_update(mos, dd->dd_object, DD_FIELD_LAST_REMAP_TXG,
- sizeof (arg->ddlrta_txg), 1, &arg->ddlrta_txg, tx));
- }
- }
-
- int
- dsl_dir_update_last_remap_txg(dsl_dir_t *dd, uint64_t txg)
- {
- ddulrt_arg_t arg;
- arg.ddulrta_dd = dd;
- arg.ddlrta_txg = txg;
-
- return (dsl_sync_task(spa_name(dd->dd_pool->dp_spa),
- NULL, dsl_dir_update_last_remap_txg_sync, &arg,
- 1, ZFS_SPACE_CHECK_RESERVED));
- }
-
/*
* Check if adding additional child filesystem(s) would exceed any filesystem
* limits or adding additional snapshot(s) would exceed any snapshot limits.
* The prop argument indicates which limit to check.
*
--- 727,736 ----
*** 1052,1073 ****
} else {
return (ENOENT);
}
}
- int
- dsl_dir_get_remaptxg(dsl_dir_t *dd, uint64_t *count)
- {
- if (dsl_dir_is_zapified(dd)) {
- objset_t *os = dd->dd_pool->dp_meta_objset;
- return (zap_lookup(os, dd->dd_object, DD_FIELD_LAST_REMAP_TXG,
- sizeof (*count), 1, count));
- } else {
- return (ENOENT);
- }
- }
-
void
dsl_dir_stats(dsl_dir_t *dd, nvlist_t *nv)
{
mutex_enter(&dd->dd_lock);
dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_QUOTA,
--- 1018,1027 ----
*** 1095,1108 ****
}
if (dsl_dir_get_snapshot_count(dd, &count) == 0) {
dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_SNAPSHOT_COUNT,
count);
}
- if (dsl_dir_get_remaptxg(dd, &count) == 0) {
- dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_REMAPTXG,
- count);
- }
if (dsl_dir_is_clone(dd)) {
char buf[ZFS_MAX_DATASET_NAME_LEN];
dsl_dir_get_origin(dd, buf);
dsl_prop_nvlist_add_string(nv, ZFS_PROP_ORIGIN, buf);
--- 1049,1058 ----