By requiring that compound pages implement destructors we can drop some code from put_page(). --- 25-akpm/mm/swap.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff -puN mm/swap.c~simplify-put_page mm/swap.c --- 25/mm/swap.c~simplify-put_page 2004-04-23 03:42:12.730149176 -0700 +++ 25-akpm/mm/swap.c 2004-04-23 03:43:59.160969232 -0700 @@ -41,11 +41,10 @@ void put_page(struct page *page) if (unlikely(PageCompound(page))) { page = (struct page *)page->private; if (put_page_testzero(page)) { - if (page[1].mapping) { /* destructor? */ - (*(void (*)(struct page *))page[1].mapping)(page); - } else { - __page_cache_release(page); - } + void (*dtor)(struct page *page); + + dtor = (void (*)(struct page *))page[1].mapping; + (*dtor)(page); } return; } _