summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/zap_micro.c
diff options
context:
space:
mode:
authorahrens <none@none>2007-10-30 15:59:43 -0700
committerahrens <none@none>2007-10-30 15:59:43 -0700
commitc5f9e43110e1fb316fc4297c2d150b3518b80bbe (patch)
tree5a6a4c47ee2bdf5b8deef087931dbb023f3ffa87 /usr/src/uts/common/fs/zfs/zap_micro.c
parent47fc2648943a9350d8d5ce9a16f7e8ea3a30d334 (diff)
downloadillumos-gate-c5f9e43110e1fb316fc4297c2d150b3518b80bbe.tar.gz
6623831 assertion failed in dmu_tx_willuse_space() from mzap_upgrade()
Diffstat (limited to 'usr/src/uts/common/fs/zfs/zap_micro.c')
-rw-r--r--usr/src/uts/common/fs/zfs/zap_micro.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/usr/src/uts/common/fs/zfs/zap_micro.c b/usr/src/uts/common/fs/zfs/zap_micro.c
index f185a7754f..f70df57da2 100644
--- a/usr/src/uts/common/fs/zfs/zap_micro.c
+++ b/usr/src/uts/common/fs/zfs/zap_micro.c
@@ -360,7 +360,7 @@ mzap_open(objset_t *os, uint64_t obj, dmu_buf_t *db)
int
zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx,
- krw_t lti, int fatreader, zap_t **zapp)
+ krw_t lti, boolean_t fatreader, boolean_t adding, zap_t **zapp)
{
zap_t *zap;
dmu_buf_t *db;
@@ -412,7 +412,7 @@ zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx,
ASSERT(!zap->zap_ismicro ||
zap->zap_m.zap_num_entries <= zap->zap_m.zap_num_chunks);
- if (zap->zap_ismicro && tx &&
+ if (zap->zap_ismicro && tx && adding &&
zap->zap_m.zap_num_entries == zap->zap_m.zap_num_chunks) {
uint64_t newsz = db->db_size + SPA_MINBLOCKSIZE;
if (newsz > MZAP_MAX_BLKSZ) {
@@ -579,7 +579,7 @@ zap_count(objset_t *os, uint64_t zapobj, uint64_t *count)
zap_t *zap;
int err;
- err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, &zap);
if (err)
return (err);
if (!zap->zap_ismicro) {
@@ -655,7 +655,7 @@ zap_lookup_norm(objset_t *os, uint64_t zapobj, const char *name,
mzap_ent_t *mze;
zap_name_t *zn;
- err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, &zap);
if (err)
return (err);
zn = zap_name_alloc(zap, name, mt);
@@ -701,7 +701,7 @@ zap_length(objset_t *os, uint64_t zapobj, const char *name,
mzap_ent_t *mze;
zap_name_t *zn;
- err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, &zap);
if (err)
return (err);
zn = zap_name_alloc(zap, name, MT_EXACT);
@@ -784,7 +784,7 @@ zap_add(objset_t *os, uint64_t zapobj, const char *name,
const uint64_t *intval = val;
zap_name_t *zn;
- err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, &zap);
if (err)
return (err);
zn = zap_name_alloc(zap, name, MT_EXACT);
@@ -823,7 +823,7 @@ zap_update(objset_t *os, uint64_t zapobj, const char *name,
zap_name_t *zn;
int err;
- err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, &zap);
if (err)
return (err);
zn = zap_name_alloc(zap, name, MT_EXACT);
@@ -869,7 +869,7 @@ zap_remove_norm(objset_t *os, uint64_t zapobj, const char *name,
mzap_ent_t *mze;
zap_name_t *zn;
- err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, FALSE, &zap);
if (err)
return (err);
zn = zap_name_alloc(zap, name, mt);
@@ -895,7 +895,6 @@ zap_remove_norm(objset_t *os, uint64_t zapobj, const char *name,
return (err);
}
-
/*
* Routines for iterating over the attributes.
*/
@@ -972,7 +971,7 @@ zap_cursor_retrieve(zap_cursor_t *zc, zap_attribute_t *za)
if (zc->zc_zap == NULL) {
err = zap_lockdir(zc->zc_objset, zc->zc_zapobj, NULL,
- RW_READER, TRUE, &zc->zc_zap);
+ RW_READER, TRUE, FALSE, &zc->zc_zap);
if (err)
return (err);
} else {
@@ -1033,7 +1032,7 @@ zap_get_stats(objset_t *os, uint64_t zapobj, zap_stats_t *zs)
int err;
zap_t *zap;
- err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, &zap);
+ err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, &zap);
if (err)
return (err);