diff options
Diffstat (limited to '')
-rw-r--r-- | kernel/lib/kalloc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 0141149..02e9457 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -34,7 +34,7 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = ((size + header_len) / PAGE_SIZE) + 1; + size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; @@ -180,7 +180,7 @@ void kfree(void *ptr) for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { if (neighbor->node_number != header->node_number) break; - if (neighbor->used && header->used) + if (neighbor->used || header->used) break; neighbor->free += header->free + header_len; neighbor->next = header->next; |