Use vmem_alloc() for 128K allocation
The mzap_update() function allocates enough memory for a full dbuf which can be 128K in size. Ideally, this memory should be allocated from our slab but in the short term it's simplest just to vmem_alloc() the memory instead. Closes #48
This commit is contained in:
parent
ebc64a43c3
commit
0d95a031bc
|
@ -532,7 +532,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, zap_flags_t flags)
|
||||||
ASSERT(RW_WRITE_HELD(&zap->zap_rwlock));
|
ASSERT(RW_WRITE_HELD(&zap->zap_rwlock));
|
||||||
|
|
||||||
sz = zap->zap_dbuf->db_size;
|
sz = zap->zap_dbuf->db_size;
|
||||||
mzp = kmem_alloc(sz, KM_SLEEP);
|
mzp = vmem_alloc(sz, KM_SLEEP);
|
||||||
bcopy(zap->zap_dbuf->db_data, mzp, sz);
|
bcopy(zap->zap_dbuf->db_data, mzp, sz);
|
||||||
nchunks = zap->zap_m.zap_num_chunks;
|
nchunks = zap->zap_m.zap_num_chunks;
|
||||||
|
|
||||||
|
@ -540,7 +540,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, zap_flags_t flags)
|
||||||
err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object,
|
err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object,
|
||||||
1ULL << fzap_default_block_shift, 0, tx);
|
1ULL << fzap_default_block_shift, 0, tx);
|
||||||
if (err) {
|
if (err) {
|
||||||
kmem_free(mzp, sz);
|
vmem_free(mzp, sz);
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -566,7 +566,7 @@ mzap_upgrade(zap_t **zapp, dmu_tx_t *tx, zap_flags_t flags)
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
kmem_free(mzp, sz);
|
vmem_free(mzp, sz);
|
||||||
*zapp = zap;
|
*zapp = zap;
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue