* Trim the per-vmem free list. Returns with the lock released to * avoid allocator recursions. */
| 337 | * avoid allocator recursions. |
| 338 | */ |
| 339 | static void |
| 340 | bt_freetrim(vmem_t *vm, int freelimit) |
| 341 | { |
| 342 | LIST_HEAD(, vmem_btag) freetags; |
| 343 | bt_t *bt; |
| 344 | |
| 345 | LIST_INIT(&freetags); |
| 346 | VMEM_ASSERT_LOCKED(vm); |
| 347 | while (vm->vm_nfreetags > freelimit) { |
| 348 | bt = LIST_FIRST(&vm->vm_freetags); |
| 349 | LIST_REMOVE(bt, bt_freelist); |
| 350 | vm->vm_nfreetags--; |
| 351 | LIST_INSERT_HEAD(&freetags, bt, bt_freelist); |
| 352 | } |
| 353 | VMEM_UNLOCK(vm); |
| 354 | while ((bt = LIST_FIRST(&freetags)) != NULL) { |
| 355 | LIST_REMOVE(bt, bt_freelist); |
| 356 | uma_zfree(vmem_bt_zone, bt); |
| 357 | } |
| 358 | } |
| 359 | |
| 360 | static inline void |
| 361 | bt_free(vmem_t *vm, bt_t *bt) |
no test coverage detected