diff --git a/kernel/fileobj.c b/kernel/fileobj.c index b39653c7..ec4a6734 100644 --- a/kernel/fileobj.c +++ b/kernel/fileobj.c @@ -395,6 +395,7 @@ static void fileobj_free(struct memobj *memobj) phys, __func__, phys, PAGE_SIZE, PAGE_SIZE); rusage_memory_stat_mapped_file_sub(PAGE_SIZE, PAGE_SIZE); + kfree(page); } } diff --git a/kernel/mem.c b/kernel/mem.c index a7f058cf..c199f3a6 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -1662,8 +1662,8 @@ int page_unmap(struct page *page) */ dkprintf("page_unmap(%p %x %d): 1\n", page, page->mode, page->count); + list_del(&page->hash); - kfree(page); ihk_mc_spinlock_unlock(&page_hash_locks[hash], irqflags); return 1; } diff --git a/kernel/shmobj.c b/kernel/shmobj.c index 2fc410c7..1800385a 100644 --- a/kernel/shmobj.c +++ b/kernel/shmobj.c @@ -277,6 +277,7 @@ static void shmobj_destroy(struct shmobj *obj) 1UL << obj->pgshift); memory_stat_rss_sub(1UL << obj->pgshift, 1UL << obj->pgshift); + kfree(page); } #if 0 dkprintf("shmobj_destroy(%p):"