mm/zsmalloc: remove redundant SetPagePrivate2 in create_page_chain
authorYisheng Xie <xieyisheng1@huawei.com>
Fri, 24 Feb 2017 22:59:42 +0000 (14:59 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 25 Feb 2017 01:46:56 +0000 (17:46 -0800)
We had used page->lru to link the component pages (except the first
page) of a zspage, and used INIT_LIST_HEAD(&page->lru) to init it.
Therefore, to get the last page's next page, which is NULL, we had to
use page flag PG_Private_2 to identify it.

But now, we use page->freelist to link all of the pages in zspage and
init the page->freelist as NULL for last page, so no need to use
PG_Private_2 anymore.

This remove redundant SetPagePrivate2 in create_page_chain and
ClearPagePrivate2 in reset_page().  Save a few cycles for migration of
zsmalloc page :)

Link: http://lkml.kernel.org/r/1487076509-49270-1-git-send-email-xieyisheng1@huawei.com
Signed-off-by: Yisheng Xie <xieyisheng1@huawei.com>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/zsmalloc.c

index a1f24989ac23a71aab531f57c5f80140d2967860..25d0fb6443d1bea33eb6c51188c9391f6b5a12a8 100644 (file)
@@ -24,7 +24,6 @@
  *
  * Usage of struct page flags:
  *     PG_private: identifies the first component page
- *     PG_private2: identifies the last component page
  *     PG_owner_priv_1: identifies the huge component page
  *
  */
@@ -938,7 +937,6 @@ static void reset_page(struct page *page)
 {
        __ClearPageMovable(page);
        ClearPagePrivate(page);
-       ClearPagePrivate2(page);
        set_page_private(page, 0);
        page_mapcount_reset(page);
        ClearPageHugeObject(page);
@@ -1085,7 +1083,7 @@ static void create_page_chain(struct size_class *class, struct zspage *zspage,
         * 2. each sub-page point to zspage using page->private
         *
         * we set PG_private to identify the first page (i.e. no other sub-page
-        * has this flag set) and PG_private_2 to identify the last page.
+        * has this flag set).
         */
        for (i = 0; i < nr_pages; i++) {
                page = pages[i];
@@ -1100,8 +1098,6 @@ static void create_page_chain(struct size_class *class, struct zspage *zspage,
                } else {
                        prev_page->freelist = page;
                }
-               if (i == nr_pages - 1)
-                       SetPagePrivate2(page);
                prev_page = page;
        }
 }