From c1270cdf6dd1db929786bf60ff1e4fcd5b7ea333 Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Fri, 14 Dec 2018 17:37:07 +0900 Subject: [PATCH] fileobj, shmobj: free pages in object destructor (as opposed to page_unmap()) Change-Id: I3ea50fc13ae5c090ba32aad4461f9741a4c35665 --- kernel/fileobj.c | 1 + kernel/mem.c | 2 +- kernel/shmobj.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) 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):"