Ted Ts'o wrote: > On Thu, Oct 28, 2010 at 02:01:18PM -0400, Ted Ts'o wrote: >> On Thu, Oct 28, 2010 at 07:52:21PM +0200, Markus Trippelsdorf wrote: >>> The same BUG (inode.c:2721) happend here today running latest vanilla >>> git. There is nothing in my logs unfortunately, but I shot a photo of >>> the trace (see attachment). >> I see, it's the page_buffers() call which is triggering. Looking into >> it... > > Can folks let me know if this fixes the problem? Ted, any idea what caused the change in behavior here? -Eric > In this case I haven't been able to replicate the problem, but I've > eyeballed the problem and I'm about 90% certain this should fix > things. But I don't want to push this to Linus until I get > confirmation from you all that it fixes things. That's just one of > the ways in which your testing is critically important for ext4, so > thanks again for your help in the past, present, and future. > Thanks!! > > - Ted > > commit 51279fcb9720aa856ad81673886ca2349a373dac > Author: Theodore Ts'o <tytso@xxxxxxx> > Date: Thu Oct 28 15:15:21 2010 -0400 > > ext4: BUG_ON fix: check if page has buffers before calling page_buffers() > > We need to make check if a page does not have buffes by checking > page_has_buffers(page) before calling page_buffers(page) in > ext4_writepage(). Otherwise page_buffers() could throw a BUG_ON. > > Signed-off-by: "Theodore Ts'o" <tytso@xxxxxxx> > > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 2d6c6c8..1916164 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -2718,7 +2718,7 @@ static int ext4_writepage(struct page *page, > * try to create them using __block_write_begin. If this > * fails, redirty the page and move on. > */ > - if (!page_buffers(page)) { > + if (!page_has_buffers(page)) { > if (__block_write_begin(page, 0, len, > noalloc_get_block_write)) { > redirty_page: > @@ -2732,12 +2732,10 @@ static int ext4_writepage(struct page *page, > if (walk_page_buffers(NULL, page_bufs, 0, len, NULL, > ext4_bh_delay_or_unwritten)) { > /* > - * We don't want to do block allocation So redirty the > - * page and return We may reach here when we do a > - * journal commit via > - * journal_submit_inode_data_buffers. If we don't > - * have mapping block we just ignore them. We can also > - * reach here via shrink_page_list > + * We don't want to do block allocation, so redirty > + * the page and return. We may reach here when we do > + * a journal commit via journal_submit_inode_data_buffers. > + * We can also reach here via shrink_page_list > */ > goto redirty_page; > } > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html