Re: [PATCH 1/3] mm: Minor clean-up of page flags in mm/page_alloc.c v4

Previous thread: [PATCH 0/3] ia64: Migrate data off physical pages with correctable errors v4 by Russ Anderson on Tuesday, May 13, 2008 - 7:01 pm. (1 message)

Next thread: [PATCH 2/3] mm: Avoid putting a bad page back on the LRU v4 by Russ Anderson on Tuesday, May 13, 2008 - 7:03 pm. (1 message)
To: <linux-kernel@...>, <linux-ia64@...>
Cc: Linus Torvalds <torvalds@...>, Andrew Morton <akpm@...>, Tony Luck <tony.luck@...>, Christoph Lameter <clameter@...>, Russ Anderson <rja@...>
Date: Tuesday, May 13, 2008 - 7:02 pm

Minor source code cleanup of page flags in mm/page_alloc.c.
There is no functional change.

Signed-off-by: Russ Anderson <rja@sgi.com>

---
include/linux/page-flags.h | 9 +++++++++
mm/page_alloc.c | 34 +++-------------------------------
2 files changed, 12 insertions(+), 31 deletions(-)

Index: linus/mm/page_alloc.c
===================================================================
--- linus.orig/mm/page_alloc.c 2008-05-12 14:23:07.711484337 -0500
+++ linus/mm/page_alloc.c 2008-05-13 10:26:46.513459253 -0500
@@ -237,16 +237,7 @@ static void bad_page(struct page *page)
printk(KERN_EMERG "Trying to fix it up, but a reboot is needed\n"
KERN_EMERG "Backtrace:\n");
dump_stack();
- page->flags &= ~(1 << PG_lru |
- 1 << PG_private |
- 1 << PG_locked |
- 1 << PG_active |
- 1 << PG_dirty |
- 1 << PG_reclaim |
- 1 << PG_slab |
- 1 << PG_swapcache |
- 1 << PG_writeback |
- 1 << PG_buddy );
+ page->flags &= ~(PAGE_FLAGS_RECLAIM);
set_page_count(page, 0);
reset_page_mapcount(page);
page->mapping = NULL;
@@ -463,16 +454,7 @@ static inline int free_pages_check(struc
(page->mapping != NULL) |
(page_get_page_cgroup(page) != NULL) |
(page_count(page) != 0) |
- (page->flags & (
- 1 << PG_lru |
- 1 << PG_private |
- 1 << PG_locked |
- 1 << PG_active |
- 1 << PG_slab |
- 1 << PG_swapcache |
- 1 << PG_writeback |
- 1 << PG_reserved |
- 1 << PG_buddy ))))
+ (page->flags & (PAGE_FLAGS_RESERVE))))
bad_page(page);
if (PageDirty(page))
__ClearPageDirty(page);
@@ -616,17 +598,7 @@ static int prep_new_page(struct page *pa
(page->mapping != NULL) |
(page_get_page_cgroup(page) != NULL) |
(page_count(page) != 0) |
- (page->flags & (
- 1 << PG_lru |
- 1 << PG_private |
- 1 << PG_locked |
- 1 <&...

To: Russ Anderson <rja@...>
Cc: <linux-kernel@...>, <linux-ia64@...>, Andrew Morton <akpm@...>, Tony Luck <tony.luck@...>, Christoph Lameter <clameter@...>
Date: Wednesday, May 14, 2008 - 4:28 pm

Could we (a) make the naming reflect the *use* rather than the flags
involved and (b) perhaps add a comment about that use at the point of

Because here I'm now otherwise looking at the code, and I wonder
- why the extra odd parenthesis?
- what does PAGE_FLAG_RECLAIM mean?

and it would be much nicer (I think) if the mask was instead called
something that reflected what it was all about, ie something along the

Same exact thing. I wonder
- why are those parenthesis there
- what does "PAGE_FLAGS_RESERVE" mean?

Woudln't it be much more readable if it was called
"PAGE_FLAGS_CHECK_AT_FREE" or something? That says "those flags will be
checked when the page is free'd", and now the use _and_ the definition

This part would also be more explainable - rather than being a random
collection of flags, wouldn't it be more natural to think of them as
"flags I check at free", or "flags that I clear when they are corrupt" or
"flags that I check before I pass on a new page allocation".

Right now it is _totally_ unclear why we should call something
PAGE_FLAGS_DIRTY when it has a lot of other bits set than just PG_dirty.
Hmm?

Linus
--

To: Linus Torvalds <torvalds@...>
Cc: <linux-kernel@...>, <linux-ia64@...>, Andrew Morton <akpm@...>, Tony Luck <tony.luck@...>, Christoph Lameter <clameter@...>
Date: Wednesday, May 14, 2008 - 5:30 pm

Yes, will do. The reason for the cleanup is the following patch
defines PG_memerror, but only on configs with extended page flags.
So checking them in page_alloc.c would require adding #ifdef, which
would be rather ugly. Moving the definitions into page-flags.h
allows the #ifdef to be in the header file rather than the C code.

From page.discard.v4:
+#ifdef CONFIG_PAGEFLAGS_EXTENDED
+PAGEFLAG(MemError, memerror)
+#define PAGE_FLAGS (PAGE_FLAGS_BASE | 1UL << PG_memerror)
+#else
+PAGEFLAG_FALSE(MemError)
+#define PAGE_FLAGS (PAGE_FLAGS_BASE)

I'll make those changes.

--
Russ Anderson, OS RAS/Partitioning Project Lead
SGI - Silicon Graphics Inc rja@sgi.com
--

Previous thread: [PATCH 0/3] ia64: Migrate data off physical pages with correctable errors v4 by Russ Anderson on Tuesday, May 13, 2008 - 7:01 pm. (1 message)

Next thread: [PATCH 2/3] mm: Avoid putting a bad page back on the LRU v4 by Russ Anderson on Tuesday, May 13, 2008 - 7:03 pm. (1 message)