From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932628AbcC3HN4 (ORCPT ); Wed, 30 Mar 2016 03:13:56 -0400 Received: from LGEAMRELO11.lge.com ([156.147.23.51]:57535 "EHLO lgeamrelo11.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758655AbcC3HKk (ORCPT ); Wed, 30 Mar 2016 03:10:40 -0400 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 10.177.223.161 X-Original-MAILFROM: minchan@kernel.org From: Minchan Kim To: Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, jlayton@poochiereds.net, bfields@fieldses.org, Vlastimil Babka , Joonsoo Kim , koct9i@gmail.com, aquini@redhat.com, virtualization@lists.linux-foundation.org, Mel Gorman , Hugh Dickins , Sergey Senozhatsky , Rik van Riel , rknize@motorola.com, Gioh Kim , Sangseok Lee , Chan Gyun Jeong , Al Viro , YiPing Xu , Minchan Kim Subject: [PATCH v3 09/16] zsmalloc: move struct zs_meta from mapping to freelist Date: Wed, 30 Mar 2016 16:12:08 +0900 Message-Id: <1459321935-3655-10-git-send-email-minchan@kernel.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1459321935-3655-1-git-send-email-minchan@kernel.org> References: <1459321935-3655-1-git-send-email-minchan@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For supporting migration from VM, we need to have address_space on every page so zsmalloc shouldn't use page->mapping. So, this patch moves zs_meta from mapping to freelist. Signed-off-by: Minchan Kim --- mm/zsmalloc.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 807998462539..d4d33a819832 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -29,7 +29,7 @@ * Look at size_class->huge. * page->lru: links together first pages of various zspages. * Basically forming list of zspages in a fullness group. - * page->mapping: override by struct zs_meta + * page->freelist: override by struct zs_meta * * Usage of struct page flags: * PG_private: identifies the first component page @@ -418,7 +418,7 @@ static int get_zspage_inuse(struct page *first_page) VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; return m->inuse; } @@ -429,7 +429,7 @@ static void set_zspage_inuse(struct page *first_page, int val) VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; m->inuse = val; } @@ -439,7 +439,7 @@ static void mod_zspage_inuse(struct page *first_page, int val) VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; m->inuse += val; } @@ -449,7 +449,7 @@ static void set_freeobj(struct page *first_page, int idx) VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; m->freeobj = idx; } @@ -459,7 +459,7 @@ static unsigned long get_freeobj(struct page *first_page) VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; return m->freeobj; } @@ -471,7 +471,7 @@ static void get_zspage_mapping(struct page *first_page, VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; *fullness = m->fullness; *class_idx = m->class; } @@ -484,7 +484,7 @@ static void set_zspage_mapping(struct page *first_page, VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - m = (struct zs_meta *)&first_page->mapping; + m = (struct zs_meta *)&first_page->freelist; m->fullness = fullness; m->class = class_idx; } @@ -946,7 +946,6 @@ static void reset_page(struct page *page) clear_bit(PG_private, &page->flags); clear_bit(PG_private_2, &page->flags); set_page_private(page, 0); - page->mapping = NULL; page->freelist = NULL; } @@ -1056,6 +1055,7 @@ static struct page *alloc_zspage(struct size_class *class, gfp_t flags) INIT_LIST_HEAD(&page->lru); if (i == 0) { /* first page */ + page->freelist = NULL; SetPagePrivate(page); set_page_private(page, 0); first_page = page; @@ -2068,9 +2068,9 @@ static int __init zs_init(void) /* * A zspage's a free object index, class index, fullness group, - * inuse object count are encoded in its (first)page->mapping + * inuse object count are encoded in its (first)page->freelist * so sizeof(struct zs_meta) should be less than - * sizeof(page->mapping(i.e., unsigned long)). + * sizeof(page->freelist(i.e., void *)). */ BUILD_BUG_ON(sizeof(struct zs_meta) > sizeof(unsigned long)); -- 1.9.1