MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vmem_rehash

Function vmem_rehash

freebsd/kern/subr_vmem.c:729–768  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

727/* ---- rehash */
728
729static int
730vmem_rehash(vmem_t *vm, vmem_size_t newhashsize)
731{
732 bt_t *bt;
733 struct vmem_hashlist *newhashlist;
734 struct vmem_hashlist *oldhashlist;
735 vmem_size_t i, oldhashsize;
736
737 MPASS(newhashsize > 0);
738
739 newhashlist = malloc(sizeof(struct vmem_hashlist) * newhashsize,
740 M_VMEM, M_NOWAIT);
741 if (newhashlist == NULL)
742 return ENOMEM;
743 for (i = 0; i < newhashsize; i++) {
744 LIST_INIT(&newhashlist[i]);
745 }
746
747 VMEM_LOCK(vm);
748 oldhashlist = vm->vm_hashlist;
749 oldhashsize = vm->vm_hashsize;
750 vm->vm_hashlist = newhashlist;
751 vm->vm_hashsize = newhashsize;
752 if (oldhashlist == NULL) {
753 VMEM_UNLOCK(vm);
754 return 0;
755 }
756 for (i = 0; i < oldhashsize; i++) {
757 while ((bt = LIST_FIRST(&oldhashlist[i])) != NULL) {
758 bt_rembusy(vm, bt);
759 bt_insbusy(vm, bt);
760 }
761 }
762 VMEM_UNLOCK(vm);
763
764 if (oldhashlist != vm->vm_hash0)
765 free(oldhashlist, M_VMEM);
766
767 return 0;
768}
769
770static void
771vmem_periodic_kick(void *dummy)

Callers 1

vmem_periodicFunction · 0.85

Calls 4

mallocFunction · 0.85
bt_rembusyFunction · 0.85
bt_insbusyFunction · 0.85
freeFunction · 0.70

Tested by

no test coverage detected