lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20101028193211.GA28126@thunk.org>
Date:	Thu, 28 Oct 2010 15:32:11 -0400
From:	Ted Ts'o <tytso@....edu>
To:	Markus Trippelsdorf <markus@...ppelsdorf.de>,
	sedat.dilek@...il.com, LKML <linux-kernel@...r.kernel.org>,
	linux-ext4@...r.kernel.org, sfr@...b.auug.org.au,
	Arnd Bergmann <arnd@...db.de>,
	Avinash Kurup <kurup.avinash@...il.com>
Subject: Re: [next-20101038] Call trace in ext4

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?

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@....edu>
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@....edu>

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-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ