From patchwork Fri Jun 15 15:54:32 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Andrzej Siewior X-Patchwork-Id: 165171 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 8111CB70A9 for ; Sat, 16 Jun 2012 01:55:21 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932360Ab2FOPzC (ORCPT ); Fri, 15 Jun 2012 11:55:02 -0400 Received: from Chamillionaire.breakpoint.cc ([80.244.247.6]:43425 "EHLO Chamillionaire.breakpoint.cc" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757030Ab2FOPzA (ORCPT ); Fri, 15 Jun 2012 11:55:00 -0400 Received: from bigeasy by Chamillionaire.breakpoint.cc with local (Exim 4.72) (envelope-from ) id 1SfYr3-0008HV-BP; Fri, 15 Jun 2012 17:54:33 +0200 Date: Fri, 15 Jun 2012 17:54:32 +0200 From: Sebastian Andrzej Siewior To: Mel Gorman Cc: Andrew Morton , Linux-MM , Linux-Netdev , LKML , David Miller , Neil Brown , Peter Zijlstra , Mike Christie , Eric B Munson Subject: [PATCH 02.5] mm: sl[au]b: first remove PFMEMALLOC flag then SLAB flag Message-ID: <20120615155432.GA5498@breakpoint.cc> References: <1337266231-8031-1-git-send-email-mgorman@suse.de> <1337266231-8031-3-git-send-email-mgorman@suse.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1337266231-8031-3-git-send-email-mgorman@suse.de> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Sebastian Andrzej Siewior If we first remove the SLAB flag followed by the PFMEMALLOC flag then the removal of the latter will trigger the VM_BUG_ON() as it can be seen in | kernel BUG at include/linux/page-flags.h:474! | invalid opcode: 0000 [#1] PREEMPT SMP | Call Trace: | [] slab_destroy+0x27/0x70 | [] drain_freelist+0x55/0x90 | [] __cache_shrink+0x6e/0x90 | [] ? acpi_sleep_init+0xcf/0xcf | [] kmem_cache_shrink+0x2d/0x40 because the SLAB flag is gone. This patch simply changes the order. Signed-off-by: Sebastian Andrzej Siewior --- mm/slab.c | 2 +- mm/slub.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/slab.c b/mm/slab.c index 00c601b..b1a39f7 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -2007,8 +2007,8 @@ static void kmem_freepages(struct kmem_cache *cachep, void *addr) NR_SLAB_UNRECLAIMABLE, nr_freed); while (i--) { BUG_ON(!PageSlab(page)); - __ClearPageSlab(page); __ClearPageSlabPfmemalloc(page); + __ClearPageSlab(page); page++; } if (current->reclaim_state) diff --git a/mm/slub.c b/mm/slub.c index f8cbec4..d753146 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1417,8 +1417,8 @@ static void __free_slab(struct kmem_cache *s, struct page *page) NR_SLAB_RECLAIMABLE : NR_SLAB_UNRECLAIMABLE, -pages); - __ClearPageSlab(page); __ClearPageSlabPfmemalloc(page); + __ClearPageSlab(page); reset_page_mapcount(page); if (current->reclaim_state) current->reclaim_state->reclaimed_slab += pages;