mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-18 10:21:01 +03:00
Fixes: #8934 Large kmem_alloc
Large allocation over the spl_kmem_alloc_warn value was being performed. Switched to vmem_alloc interface as specified for large allocations. Changed the subsequent frees to match. Reviewed-by: Tom Caputi <tcaputi@datto.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: nmattis <nickm970@gmail.com> Closes #8934 Closes #9011
This commit is contained in:
parent
6e19cc77cf
commit
cf966cb19a
@ -70,7 +70,7 @@ vdev_indirect_births_close(vdev_indirect_births_t *vib)
|
|||||||
if (vib->vib_phys->vib_count > 0) {
|
if (vib->vib_phys->vib_count > 0) {
|
||||||
uint64_t births_size = vdev_indirect_births_size_impl(vib);
|
uint64_t births_size = vdev_indirect_births_size_impl(vib);
|
||||||
|
|
||||||
kmem_free(vib->vib_entries, births_size);
|
vmem_free(vib->vib_entries, births_size);
|
||||||
vib->vib_entries = NULL;
|
vib->vib_entries = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ vdev_indirect_births_open(objset_t *os, uint64_t births_object)
|
|||||||
|
|
||||||
if (vib->vib_phys->vib_count > 0) {
|
if (vib->vib_phys->vib_count > 0) {
|
||||||
uint64_t births_size = vdev_indirect_births_size_impl(vib);
|
uint64_t births_size = vdev_indirect_births_size_impl(vib);
|
||||||
vib->vib_entries = kmem_alloc(births_size, KM_SLEEP);
|
vib->vib_entries = vmem_alloc(births_size, KM_SLEEP);
|
||||||
VERIFY0(dmu_read(vib->vib_objset, vib->vib_object, 0,
|
VERIFY0(dmu_read(vib->vib_objset, vib->vib_object, 0,
|
||||||
births_size, vib->vib_entries, DMU_READ_PREFETCH));
|
births_size, vib->vib_entries, DMU_READ_PREFETCH));
|
||||||
}
|
}
|
||||||
@ -148,10 +148,10 @@ vdev_indirect_births_add_entry(vdev_indirect_births_t *vib,
|
|||||||
vib->vib_phys->vib_count++;
|
vib->vib_phys->vib_count++;
|
||||||
new_size = vdev_indirect_births_size_impl(vib);
|
new_size = vdev_indirect_births_size_impl(vib);
|
||||||
|
|
||||||
new_entries = kmem_alloc(new_size, KM_SLEEP);
|
new_entries = vmem_alloc(new_size, KM_SLEEP);
|
||||||
if (old_size > 0) {
|
if (old_size > 0) {
|
||||||
bcopy(vib->vib_entries, new_entries, old_size);
|
bcopy(vib->vib_entries, new_entries, old_size);
|
||||||
kmem_free(vib->vib_entries, old_size);
|
vmem_free(vib->vib_entries, old_size);
|
||||||
}
|
}
|
||||||
new_entries[vib->vib_phys->vib_count - 1] = vibe;
|
new_entries[vib->vib_phys->vib_count - 1] = vibe;
|
||||||
vib->vib_entries = new_entries;
|
vib->vib_entries = new_entries;
|
||||||
|
Loading…
Reference in New Issue
Block a user