All of lore.kernel.org
 help / color / mirror / Atom feed
From: Theodore Tso <tytso@mit.edu>
To: Mingming Cao <cmm@us.ibm.com>
Cc: "Frédéric Bohé" <frederic.bohe@bull.net>,
	"Shehjar Tikoo" <shehjart@cse.unsw.edu.au>,
	linux-ext4@vger.kernel.org,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	"Andreas Dilger" <adilger@sun.com>
Subject: Re: [PATCH v3]Ext4: journal credits reservation fixes for DIO, fallocate and delalloc writepages
Date: Fri, 1 Aug 2008 01:49:32 -0400	[thread overview]
Message-ID: <20080801054932.GF8736@mit.edu> (raw)
In-Reply-To: <1217527631.6317.6.camel@mingming-laptop>

On Thu, Jul 31, 2008 at 11:07:11AM -0700, Mingming Cao wrote:
> 
> Looks like a 1k blocksize ext4, I have tested 1k briefly it seems okay
> for single test. I will try bonnie myself. The stack shows there isn't
> enought credit to delete an file.  But the journal credit fix mostly fix
> the code path on writepages(), so it should not affact the unlink case.

Yep, different bug.  I think this patch should fix things.

There's a larger question here which is should the extents code really
be requesting only a tiny amount of transaction credits at a time; the
advantage is that by doing so, it reduces the chance of provoking a
transaction commit before its time.  On the other hand, for a very
fragmented file with lots of extents, this will cause lots of extra
calls jbd2_journal_extend(), which does end up taking a bit more cpu
time as well as grabbing both the journal and the transaction spin
locks.

The original non-extents truncate code massively overestimates the
number of credits needed to complete the truncate (to the point where
it is probably needlessly causing transactions to close early) but it
means many fewer calls to jbd2_journal_extend().

     	       	       	     	  	       - Ted

commit 0e71ff5fc4cf98c44014a1d3c8ccffed846e7ee1
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Fri Aug 1 01:40:08 2008 -0400

    ext4: Fix lack of credits BUG() when deleting a badly fragmented inode
    
    The extents codepath for ext4_truncate() requests journal transaction
    credits in very small chunks, requesting only what is needed.  This
    means there may not be enough credits left on the transaction handle
    after ext4_truncate() returns and then when ext4_delete_inode() tries
    finish up its work, it may not have enough transaction credits,
    causing a BUG() oops in the jbd2 core.
    
    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index c7fb647..6d27e78 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -215,6 +215,18 @@ void ext4_delete_inode (struct inode * inode)
 	inode->i_size = 0;
 	if (inode->i_blocks)
 		ext4_truncate(inode);
+
+	/*
+	 * ext4_ext_truncate() doesn't reserve any slop when it
+	 * restarts journal transactions; therefore there may not be
+	 * enough credits left in the handle to remove the inode from
+	 * the orphan list and set the dtime field.
+	 */
+	if (ext4_ext_journal_restart(handle, 3)) {
+		ext4_journal_stop(handle);
+		goto no_delete;
+	}
+
 	/*
 	 * Kill off the orphan record which ext4_truncate created.
 	 * AKPM: I think this can be inside the above `if'.

  reply	other threads:[~2008-08-01  5:49 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-21  4:28 Crash and stack trace for jbd2 under ext4 Shehjar Tikoo
2008-07-21  8:20 ` Aneesh Kumar K.V
2008-07-23  0:49   ` Mingming Cao
2008-07-23  0:51   ` [RFC]Ext4: journal credits reservation fixes for DIO, fallocate and delalloc writepages Mingming Cao
2008-07-23  1:18     ` Andreas Dilger
2008-07-23 18:19       ` Theodore Tso
2008-07-25 19:38       ` Mingming Cao
2008-07-23  7:42     ` Aneesh Kumar K.V
2008-07-24  2:07       ` Andreas Dilger
2008-07-25 19:26       ` Mingming Cao
2008-07-28 16:11         ` Aneesh Kumar K.V
2008-07-28 19:07           ` Mingming Cao
2008-07-29  6:24             ` Aneesh Kumar K.V
2008-07-26  0:42       ` [PATCH v2]Ext4: " Mingming Cao
2008-07-30  1:58         ` [PATCH v3]Ext4: " Mingming Cao
2008-07-30 11:29           ` Frédéric Bohé
2008-07-31 18:07             ` Mingming Cao
2008-08-01  5:49               ` Theodore Tso [this message]
2008-08-01 10:51                 ` Frédéric Bohé
2008-08-01 18:08                   ` Mingming Cao
2008-08-01 18:03                 ` Mingming Cao
2008-08-01 19:10                   ` Theodore Tso
2008-08-02  0:03                     ` Theodore Tso
2008-08-04 11:23                       ` Frédéric Bohé
2008-08-04 13:20                         ` Theodore Tso
2008-07-30 11:36           ` Andreas Dilger
2008-07-30 12:16           ` Aneesh Kumar K.V
2008-08-01 19:29           ` Theodore Tso
2008-08-02  0:22             ` Theodore Tso
2008-08-12 16:23         ` [PATCH 0/6 ]Ext4 journal credits reservation fixes Mingming Cao
2008-08-12 16:25           ` [PATCH 1/6 ]Ext4 credits caclulation cleanup and fix that for nonextent writepage Mingming Cao
2008-08-13  8:31             ` Aneesh Kumar K.V
2008-08-14  0:30               ` Mingming Cao
2008-08-13 10:19             ` Aneesh Kumar K.V
2008-08-14  1:02               ` Mingming Cao
2008-08-16  0:37             ` [PATCH 1/6 V2 " Mingming Cao
2008-08-12 16:27           ` [PATCH 2/6 ]Ext4: journal credits reservation fixes for extent file writepage Mingming Cao
2008-08-13  8:37             ` Aneesh Kumar K.V
2008-08-14  0:26               ` Mingming Cao
2008-08-14  8:28                 ` Aneesh Kumar K.V
2008-08-16  0:38             ` [PATCH 2/6 V2]Ext4: " Mingming Cao
2008-08-16  4:25               ` Aneesh Kumar K.V
2008-08-12 16:29           ` [PATCH 3/6 ]Ext4: journal credits reservation fixes for DIO, fallocate Mingming Cao
2008-08-13  8:53             ` Aneesh Kumar K.V
2008-08-13 10:14               ` Aneesh Kumar K.V
2008-08-14  0:50               ` Mingming Cao
2008-08-16  0:39             ` [PATCH 3/6 V2 " Mingming Cao
2008-08-12 16:32           ` [PATCH 4/6 ]ext4: Rework the ext4_da_writepages Mingming Cao
2008-08-16  0:43             ` [PATCH 4/6 V2]ext4: " Mingming Cao
2008-08-12 16:35           ` [PATCH 5/6 ]Ext4 journal credits reservation fixes Mingming Cao
2008-08-13  9:46             ` Aneesh Kumar K.V
2008-08-14  1:01               ` Mingming Cao
2008-08-14  8:40                 ` Aneesh Kumar K.V
2008-08-16  0:40             ` [PATCH 5/6 V2]Ext4 journal credits fixes for delalloc writepages Mingming Cao
2008-08-16  4:23               ` Aneesh Kumar K.V
2008-08-12 16:37           ` [PATCH 6/6 ]Ext4 journal credits reservation fixes for defrag Mingming Cao
2008-08-16  0:45             ` [PATCH 6/6 V2]Ext4 " Mingming Cao
2008-08-16 15:55               ` Theodore Tso
2008-08-15 17:33           ` [PATCH 0/6 ]Ext4 journal credits reservation fixes Aneesh Kumar K.V
2008-08-15 19:02             ` Mingming Cao
2008-08-16  0:34               ` Mingming Cao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080801054932.GF8736@mit.edu \
    --to=tytso@mit.edu \
    --cc=adilger@sun.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=cmm@us.ibm.com \
    --cc=frederic.bohe@bull.net \
    --cc=linux-ext4@vger.kernel.org \
    --cc=shehjart@cse.unsw.edu.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.