summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs
diff options
context:
space:
mode:
authorChris Kirby <Chris.Kirby@sun.com>2009-10-15 07:09:05 -0600
committerChris Kirby <Chris.Kirby@sun.com>2009-10-15 07:09:05 -0600
commitc4cbca4f3a766d8c662ce2e0e36a6f1e41ff0a80 (patch)
treefa442160f49f3df75537c8566960b24810f5062a /usr/src/uts/common/fs
parentd4c50ab7dcb92d18d675302718e6b95d9ef2e291 (diff)
downloadillumos-gate-c4cbca4f3a766d8c662ce2e0e36a6f1e41ff0a80.tar.gz
6881321 zfs test rsend_012_pos panics when running daily.0807 archives
Diffstat (limited to 'usr/src/uts/common/fs')
-rw-r--r--usr/src/uts/common/fs/zfs/dsl_dataset.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c b/usr/src/uts/common/fs/zfs/dsl_dataset.c
index d3a423bb40..aadf4cb051 100644
--- a/usr/src/uts/common/fs/zfs/dsl_dataset.c
+++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c
@@ -2824,6 +2824,10 @@ dsl_dataset_clone_swap_check(void *arg1, void *arg2, dmu_tx_t *tx)
dsl_dir_space_available(csa->ohds->ds_dir, NULL, 0, TRUE))
return (ENOSPC);
+ if (csa->ohds->ds_quota != 0 &&
+ csa->cds->ds_phys->ds_unique_bytes > csa->ohds->ds_quota)
+ return (EDQUOT);
+
return (0);
}
@@ -2835,7 +2839,8 @@ dsl_dataset_clone_swap_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
dsl_pool_t *dp = csa->cds->ds_dir->dd_pool;
ASSERT(csa->cds->ds_reserved == 0);
- ASSERT(csa->cds->ds_quota == csa->ohds->ds_quota);
+ ASSERT(csa->ohds->ds_quota == 0 ||
+ csa->cds->ds_phys->ds_unique_bytes <= csa->ohds->ds_quota);
dmu_buf_will_dirty(csa->cds->ds_dbuf, tx);
dmu_buf_will_dirty(csa->ohds->ds_dbuf, tx);