Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Nick Piggin
Date: Thursday, June 12, 2008 - 4:38 am

On Thursday 12 June 2008 18:57, Andrew Morton wrote:
<kamalesh@linux.vnet.ibm.com> wrote:

Looks like something lockless pagecache *could* be connected with, but
I have never seen such a bug.

Hmm...

@@ -104,6 +105,7 @@ truncate_complete_page(struct address_sp
        cancel_dirty_page(page, PAGE_CACHE_SIZE);

        remove_from_page_cache(page);
+       clear_page_mlock(page);
        ClearPageUptodate(page);
        ClearPageMappedToDisk(page);
        page_cache_release(page);       /* pagecache ref */

...

+static inline void clear_page_mlock(struct page *page)
+{
+       if (unlikely(TestClearPageMlocked(page)))
+               __clear_page_mlock(page);
+}

...

+void __clear_page_mlock(struct page *page)
+{
+       VM_BUG_ON(!PageLocked(page));   /* for LRU isolate/putback */
+
+       dec_zone_page_state(page, NR_MLOCK);
+       count_vm_event(NORECL_PGCLEARED);
+       if (!isolate_lru_page(page)) {
+               putback_lru_page(page);
+       } else {
+               /*
+                * Page not on the LRU yet.  Flush all pagevecs and retry.
+                */
+               lru_add_drain_all();
+               if (!isolate_lru_page(page))
+                       putback_lru_page(page);
+               else if (PageUnevictable(page))
+                       count_vm_event(NORECL_PGSTRANDED);
+       }
+}

...

+int putback_lru_page(struct page *page)
+{
+       int lru;
+       int ret = 1;
+       int was_unevictable;
+
+       VM_BUG_ON(!PageLocked(page));
+       VM_BUG_ON(PageLRU(page));
+
+       lru = !!TestClearPageActive(page);
+       was_unevictable = TestClearPageUnevictable(page); /* for 
page_evictable() */
+
+       if (unlikely(!page->mapping)) {
+               /*
+                * page truncated.  drop lock as put_page() will
+                * free the page.
+                */
+               VM_BUG_ON(page_count(page) != 1);
+               unlock_page(page);
                ^^^^^^^^^^^^^^^^^^


This is a rather wild thing to be doing. It's a really bad idea
to drop a lock that's taken several function calls distant and
across different files...

This is most likely where the locking is getting screwed up, but
even if it was cobbled together to work, it just makes the
locking scheme very hard to follow and verify.

I don't have any suggestions yet, as I still haven't been able
to review the patchset properly (and probably won't for the next
week or so). But please rethink the locking.

Thanks,
Nick
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.26-rc5-mm3, Andrew Morton, (Wed Jun 11, 10:59 pm)
2.6.26-rc5-mm3: kernel BUG at mm/vmscan.c:510, Alexey Dobriyan, (Thu Jun 12, 12:58 am)
Re: 2.6.26-rc5-mm3: kernel BUG at mm/vmscan.c:510, Andrew Morton, (Thu Jun 12, 1:22 am)
Re: 2.6.26-rc5-mm3: kernel BUG at mm/vmscan.c:510, Alexey Dobriyan, (Thu Jun 12, 1:23 am)
[BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, Kamalesh Babulal, (Thu Jun 12, 1:44 am)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, Andrew Morton, (Thu Jun 12, 1:57 am)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, KAMEZAWA Hiroyuki, (Thu Jun 12, 4:20 am)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, Nick Piggin, (Thu Jun 12, 4:38 am)
Re: 2.6.26-rc5-mm3, Byron Bradley, (Thu Jun 12, 4:32 pm)
Re: 2.6.26-rc5-mm3, Daniel Walker, (Thu Jun 12, 4:55 pm)
Re: 2.6.26-rc5-mm3, Byron Bradley, (Thu Jun 12, 5:04 pm)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, KAMEZAWA Hiroyuki, (Thu Jun 12, 5:25 pm)
[PATCH] fix double unlock_page() in 2.6.26-rc5-mm3 kernel ..., KAMEZAWA Hiroyuki, (Thu Jun 12, 6:44 pm)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, Valdis.Kletnieks, (Thu Jun 12, 9:18 pm)
Re: [BUG] 2.6.26-rc5-mm3 kernel BUG at mm/filemap.c:575!, Andrew Morton, (Fri Jun 13, 12:16 am)
Re: [PATCH] fix double unlock_page() in 2.6.26-rc5-mm3 ker ..., KAMEZAWA Hiroyuki, (Mon Jun 16, 7:32 pm)
[PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2.6.26 ..., Daisuke Nishimura, (Tue Jun 17, 12:35 am)
[Bad page] trying to free locked page? (Re: [PATCH][RFC] f ..., Daisuke Nishimura, (Tue Jun 17, 12:47 am)
Re: [Bad page] trying to free locked page? (Re: [PATCH][RF ..., KAMEZAWA Hiroyuki, (Tue Jun 17, 2:03 am)
Re: [Bad page] trying to free locked page? (Re: [PATCH][RF ..., Daisuke Nishimura, (Tue Jun 17, 2:15 am)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Lee Schermerhorn, (Tue Jun 17, 10:46 am)
Re: [Bad page] trying to free locked page? (Re: [PATCH][RF ..., Lee Schermerhorn, (Tue Jun 17, 11:29 am)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Lee Schermerhorn, (Tue Jun 17, 12:28 pm)
[PATCH] unevictable mlocked pages: initialize mm member o ..., Lee Schermerhorn, (Tue Jun 17, 1:00 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., KAMEZAWA Hiroyuki, (Tue Jun 17, 6:13 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Daisuke Nishimura, (Tue Jun 17, 6:26 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Daisuke Nishimura, (Tue Jun 17, 6:54 pm)
[PATCH] migration_entry_wait fix., KAMEZAWA Hiroyuki, (Tue Jun 17, 6:54 pm)
Re: [Bad page] trying to free locked page? (Re: [PATCH][RF ..., Daisuke Nishimura, (Tue Jun 17, 7:32 pm)
Re: [Bad page] trying to free locked page? (Re: [PATCH][RF ..., Daisuke Nishimura, (Tue Jun 17, 7:40 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Daisuke Nishimura, (Tue Jun 17, 7:59 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., Daisuke Nishimura, (Tue Jun 17, 9:41 pm)
Re: [PATCH][RFC] fix kernel BUG at mm/migrate.c:719! in 2. ..., KAMEZAWA Hiroyuki, (Tue Jun 17, 9:59 pm)
Re: [PATCH] migration_entry_wait fix., KOSAKI Motohiro, (Tue Jun 17, 10:26 pm)
Re: [PATCH] migration_entry_wait fix., Nick Piggin, (Tue Jun 17, 10:35 pm)
Re: [PATCH] migration_entry_wait fix., KAMEZAWA Hiroyuki, (Tue Jun 17, 11:04 pm)
Re: [PATCH] migration_entry_wait fix., Nick Piggin, (Tue Jun 17, 11:42 pm)
Re: [PATCH] migration_entry_wait fix., KAMEZAWA Hiroyuki, (Tue Jun 17, 11:52 pm)
Re: [PATCH -mm][BUGFIX] migration_entry_wait fix. v2, KOSAKI Motohiro, (Wed Jun 18, 12:26 am)
[PATCH -mm][BUGFIX] migration_entry_wait fix. v2, KAMEZAWA Hiroyuki, (Wed Jun 18, 12:29 am)
Re: [PATCH -mm][BUGFIX] migration_entry_wait fix. v2, Nick Piggin, (Wed Jun 18, 12:40 am)
[PATCH][-mm] remove redundant page-&gt;mapping check, KOSAKI Motohiro, (Wed Jun 18, 12:54 am)
[Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Wed Jun 18, 2:40 am)
Re: [Experimental][PATCH] putback_lru_page rework, KOSAKI Motohiro, (Wed Jun 18, 4:36 am)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Wed Jun 18, 4:55 am)
Re: [Experimental][PATCH] putback_lru_page rework, Daisuke Nishimura, (Wed Jun 18, 7:50 am)
Re: 2.6.26-rc5-mm3, Daniel Walker, (Wed Jun 18, 10:55 am)
Re: [Experimental][PATCH] putback_lru_page rework, Lee Schermerhorn, (Wed Jun 18, 11:21 am)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Wed Jun 18, 5:22 pm)
[BUG][PATCH -mm] avoid BUG() in __stop_machine_run(), Hidehiro Kawai, (Wed Jun 18, 11:59 pm)
Re: [Experimental][PATCH] putback_lru_page rework, Daisuke Nishimura, (Thu Jun 19, 1:00 am)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Thu Jun 19, 1:24 am)
Re: 2.6.26-rc5-mm3, Ingo Molnar, (Thu Jun 19, 2:13 am)
Re: [BUG][PATCH -mm] avoid BUG() in __stop_machine_run(), Rusty Russell, (Thu Jun 19, 3:12 am)
Re: 2.6.26-rc5-mm3, Daniel Walker, (Thu Jun 19, 7:39 am)
Re: [Experimental][PATCH] putback_lru_page rework, Lee Schermerhorn, (Thu Jun 19, 7:45 am)
Re: Re: [Experimental][PATCH] putback_lru_page rework, kamezawa.hiroyu, (Thu Jun 19, 8:32 am)
Re: [BUG][PATCH -mm] avoid BUG() in __stop_machine_run(), Jeremy Fitzhardinge, (Thu Jun 19, 8:51 am)
Re: 2.6.26-rc5-mm3: BUG large value for HugePages_Rsvd, Jon Tollefson, (Thu Jun 19, 9:27 am)
Re: 2.6.26-rc5-mm3: BUG large value for HugePages_Rsvd, Andy Whitcroft, (Thu Jun 19, 10:16 am)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Thu Jun 19, 5:47 pm)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Thu Jun 19, 6:13 pm)
Re: 2.6.26-rc5-mm3: BUG large value for HugePages_Rsvd, Jon Tollefson, (Thu Jun 19, 8:18 pm)
Re: Re: [Experimental][PATCH] putback_lru_page rework, Lee Schermerhorn, (Fri Jun 20, 9:24 am)
Re: [Experimental][PATCH] putback_lru_page rework, Lee Schermerhorn, (Fri Jun 20, 10:10 am)
Re: [Experimental][PATCH] putback_lru_page rework, Lee Schermerhorn, (Fri Jun 20, 1:41 pm)
Re: [Experimental][PATCH] putback_lru_page rework, KOSAKI Motohiro, (Sat Jun 21, 1:39 am)
Re: [Experimental][PATCH] putback_lru_page rework, KOSAKI Motohiro, (Sat Jun 21, 1:41 am)
Re: [Experimental][PATCH] putback_lru_page rework, KOSAKI Motohiro, (Sat Jun 21, 1:56 am)
Re: [Experimental][PATCH] putback_lru_page rework, KAMEZAWA Hiroyuki, (Sun Jun 22, 5:30 pm)
Re: [BUG][PATCH -mm] avoid BUG() in __stop_machine_run(), Rusty Russell, (Sun Jun 22, 8:55 pm)