From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760183AbYEBCdV (ORCPT ); Thu, 1 May 2008 22:33:21 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756019AbYEBCdM (ORCPT ); Thu, 1 May 2008 22:33:12 -0400 Received: from netops-testserver-3-out.sgi.com ([192.48.171.28]:39949 "EHLO relay.sgi.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751564AbYEBCdL (ORCPT ); Thu, 1 May 2008 22:33:11 -0400 Date: Thu, 1 May 2008 21:33:08 -0500 From: Russ Anderson To: Christoph Lameter Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org, Linus Torvalds , Andrew Morton , Tony Luck Subject: Re: [PATCH 2/3] mm: Avoid putting a bad page back on the LRU v2 Message-ID: <20080502023307.GA1591@sgi.com> Reply-To: Russ Anderson References: <20080502004248.GC12006@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.9i Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 01, 2008 at 06:12:49PM -0700, Christoph Lameter wrote: > On Thu, 1 May 2008, Russ Anderson wrote: > > > Index: linus/mm/migrate.c > > =================================================================== > > --- linus.orig/mm/migrate.c 2008-05-01 19:05:33.000000000 -0500 > > +++ linus/mm/migrate.c 2008-05-01 19:06:15.000000000 -0500 > > @@ -380,6 +380,7 @@ static void migrate_page_copy(struct pag > > SetPageChecked(newpage); > > if (PageMappedToDisk(page)) > > SetPageMappedToDisk(newpage); > > + /* Do not migrate PG_memerror to the new page */ > > Why is the comment here? To let anyone that may think PG_memerror should get copied to the new page that it should not. I can remove the comment. > > if (PageDirty(page)) { > > clear_page_dirty_for_io(page); > > @@ -721,6 +722,8 @@ unlock: > > */ > > list_del(&page->lru); > > move_to_lru(page); > > + if (PageMemError(page)) > > + totalbad_pages++; > > Wouldnt this be taken care of by the lru handling? It is only for accounting purposes, keeping a count of the bad pages. > > +#ifdef CONFIG_PAGEFLAGS_EXTENDED > > +PAGEFLAG(MemError, memerror) > > +#else > > +#define PageMemError(page) 0 > > Use > > PAGEFLAG_FLAGS(MemError) OK. > > #include > > > > -#define PAGE_FLAGS (1 << PG_lru | 1 << PG_private | 1 << PG_locked | \ > > +#define PAGE_FLAGS_BASE (1 << PG_lru | 1 << PG_private | 1 << PG_locked | \ > > 1 << PG_buddy | 1 << PG_writeback | \ > > 1 << PG_slab | 1 << PG_swapcache | 1 << PG_active) > > + > > +#ifdef CONFIG_PAGEFLAGS_EXTENDED > > +#define PAGE_FLAGS (PAGE_FLAGS_BASE | 1UL << PG_memerror) > > +#else > > +#define PAGE_FLAGS (PAGE_FLAGS_BASE) > > +#endif > > > > #define PAGE_FLAGS_RECLAIM (PAGE_FLAGS | 1 << PG_reclaim | 1 << PG_dirty) > > #define PAGE_FLAGS_RESERVE (PAGE_FLAGS | 1 << PG_reserved) > > The groups of page flags could also be put into page-flags.h. page-flags.h is where I originally put them. Since they are only used in mm/page_alloc.c, I thought mm.h would be a more appropriate place. I can put them in page-flags.h. -- Russ Anderson, OS RAS/Partitioning Project Lead SGI - Silicon Graphics Inc rja@sgi.com