mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 04:07:45 +03:00
Convert zio_buf_alloc() consumers
In multiple cases zio_buf_alloc() was used instead of kmem_alloc() or vmem_alloc(). This was often done because the allocations could be large and it was easy to use zfs_buf_alloc() for them. But this isn't ideal for allocations which are small or short lived. In these cases it is better to use kmem_alloc() or vmem_alloc(). If possible we want to avoid the case where we have slabs allocated for kmem caches which are rarely used. Note for small allocations vmem_alloc() will be internally converted to kmem_alloc(). Therefore as long as large allocations are infrequent and short lived the penalty for using vmem_alloc() is small. Reviewed-by: Chunwei Chen <david.chen@osnexus.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #5409
This commit is contained in:
@@ -584,7 +584,7 @@ mzap_upgrade(zap_t **zapp, void *tag, dmu_tx_t *tx, zap_flags_t flags)
|
||||
ASSERT(RW_WRITE_HELD(&zap->zap_rwlock));
|
||||
|
||||
sz = zap->zap_dbuf->db_size;
|
||||
mzp = zio_buf_alloc(sz);
|
||||
mzp = vmem_alloc(sz, KM_SLEEP);
|
||||
bcopy(zap->zap_dbuf->db_data, mzp, sz);
|
||||
nchunks = zap->zap_m.zap_num_chunks;
|
||||
|
||||
@@ -592,7 +592,7 @@ mzap_upgrade(zap_t **zapp, void *tag, dmu_tx_t *tx, zap_flags_t flags)
|
||||
err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object,
|
||||
1ULL << fzap_default_block_shift, 0, tx);
|
||||
if (err) {
|
||||
zio_buf_free(mzp, sz);
|
||||
vmem_free(mzp, sz);
|
||||
return (err);
|
||||
}
|
||||
}
|
||||
@@ -619,7 +619,7 @@ mzap_upgrade(zap_t **zapp, void *tag, dmu_tx_t *tx, zap_flags_t flags)
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
zio_buf_free(mzp, sz);
|
||||
vmem_free(mzp, sz);
|
||||
*zapp = zap;
|
||||
return (err);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user