Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936640Ab3DIBUs (ORCPT ); Mon, 8 Apr 2013 21:20:48 -0400 Received: from LGEMRELSE6Q.lge.com ([156.147.1.121]:51034 "EHLO LGEMRELSE6Q.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936523Ab3DIBUq (ORCPT ); Mon, 8 Apr 2013 21:20:46 -0400 X-AuditID: 9c930179-b7b2aae000000518-6d-51636cea7c6b From: Joonsoo Kim To: Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Mel Gorman , Hugh Dickins , Rik van Riel , Minchan Kim , Joonsoo Kim , Christoph Lameter , Pekka Enberg , Matt Mackall Subject: [PATCH 2/3] mm, slub: count freed pages via rcu as this task's reclaimed_slab Date: Tue, 9 Apr 2013 10:21:17 +0900 Message-Id: <1365470478-645-2-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1365470478-645-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1365470478-645-1-git-send-email-iamjoonsoo.kim@lge.com> X-Brightmail-Tracker: AAAAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1723 Lines: 51 Currently, freed pages via rcu is not counted for reclaimed_slab, because it is freed in rcu context, not current task context. But, this free is initiated by this task, so counting this into this task's reclaimed_slab is meaningful to decide whether we continue reclaim, or not. So change code to count these pages for this task's reclaimed_slab. Cc: Christoph Lameter Cc: Pekka Enberg Cc: Matt Mackall Signed-off-by: Joonsoo Kim diff --git a/mm/slub.c b/mm/slub.c index 4aec537..16fd2d5 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1409,8 +1409,6 @@ static void __free_slab(struct kmem_cache *s, struct page *page) memcg_release_pages(s, order); page_mapcount_reset(page); - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += pages; __free_memcg_kmem_pages(page, order); } @@ -1431,6 +1429,8 @@ static void rcu_free_slab(struct rcu_head *h) static void free_slab(struct kmem_cache *s, struct page *page) { + int pages = 1 << compound_order(page); + if (unlikely(s->flags & SLAB_DESTROY_BY_RCU)) { struct rcu_head *head; @@ -1450,6 +1450,9 @@ static void free_slab(struct kmem_cache *s, struct page *page) call_rcu(head, rcu_free_slab); } else __free_slab(s, page); + + if (current->reclaim_state) + current->reclaim_state->reclaimed_slab += pages; } static void discard_slab(struct kmem_cache *s, struct page *page) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/