From: Nick Piggin <nickpiggin@yahoo.com.au>

This bitop does not need to be atomic because it is performed when there will
be no references to the page (ie.  the page is being freed).

Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 include/linux/page-flags.h |    1 +
 mm/page_alloc.c            |    2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff -puN include/linux/page-flags.h~mm-remove-atomic include/linux/page-flags.h
--- 25/include/linux/page-flags.h~mm-remove-atomic	Tue Jul 26 13:29:23 2005
+++ 25-akpm/include/linux/page-flags.h	Tue Jul 26 13:29:23 2005
@@ -194,6 +194,7 @@ extern void __mod_page_state(unsigned lo
 #define SetPageDirty(page)	set_bit(PG_dirty, &(page)->flags)
 #define TestSetPageDirty(page)	test_and_set_bit(PG_dirty, &(page)->flags)
 #define ClearPageDirty(page)	clear_bit(PG_dirty, &(page)->flags)
+#define __ClearPageDirty(page)	__clear_bit(PG_dirty, &(page)->flags)
 #define TestClearPageDirty(page) test_and_clear_bit(PG_dirty, &(page)->flags)
 
 #define SetPageLRU(page)	set_bit(PG_lru, &(page)->flags)
diff -puN mm/page_alloc.c~mm-remove-atomic mm/page_alloc.c
--- 25/mm/page_alloc.c~mm-remove-atomic	Tue Jul 26 13:29:23 2005
+++ 25-akpm/mm/page_alloc.c	Tue Jul 26 13:29:23 2005
@@ -329,7 +329,7 @@ static inline void free_pages_check(cons
 			1 << PG_writeback )))
 		bad_page(function, page);
 	if (PageDirty(page))
-		ClearPageDirty(page);
+		__ClearPageDirty(page);
 }
 
 /*
_