diff options
author | ahrens <none@none> | 2007-10-30 15:59:43 -0700 |
---|---|---|
committer | ahrens <none@none> | 2007-10-30 15:59:43 -0700 |
commit | c5f9e43110e1fb316fc4297c2d150b3518b80bbe (patch) | |
tree | 5a6a4c47ee2bdf5b8deef087931dbb023f3ffa87 /usr/src/uts/common/fs/zfs/zap_micro.c | |
parent | 47fc2648943a9350d8d5ce9a16f7e8ea3a30d334 (diff) | |
download | illumos-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.c | 21 |
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); |