From: Mingming Cao <cmm@us.ibm.com>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: Ext4 Developers List <linux-ext4@vger.kernel.org>,
Aneesh Kumar <aneesh.kumar@gmail.com>
Subject: Re: [PATCH] ext4: calculate journal credits correctly
Date: Wed, 12 Nov 2008 16:03:42 -0800 [thread overview]
Message-ID: <1226534622.12488.25.camel@mingming-laptop> (raw)
In-Reply-To: <1226001075-16457-1-git-send-email-tytso@mit.edu>
在 2008-11-06四的 14:51 -0500,Theodore Ts'o写道:
> This fixes a 2.6.27 regression which was introduced in commit a02908f1.
>
> We weren't passing the chunk parameter down to the two subections,
> ext4_indirect_trans_blocks() and ext4_ext_index_trans_blocks(), with
> the result that massively overestimate the amount of credits needed by
> ext4_da_writepages, especially in the non-extents case. This causes
> failures especially on /boot partitions, which tend to be small and
> non-extent using since GRUB doesn't handle extents.
>
> Thanks to Joseph Fannin for reporting this bug.
>
Thanks for fixing this up!
However, looking at the code path, I wasn't sure if we got the delalloc
credits right. In ext4_da_writepages()->mpage_da_writepages(), the
credits is calculated based on the assumption that mpage_da_writepages()
doing* one* single chunk of contigugous allocation? So only one single
extent credit is reserved (here you see the "chunk" flag passed from the
ext4_da_writepages)
__mpage_da_writepage() does do single chunk of block allocation at a
time, but mpage_da_writepages()->write_cache_pages() will loop the page
vectors and probably will calling writepage->__mpage_da_writepage->
mpage_da_map_blocks() multiple times? Am I missing anything?
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
> ---
> fs/ext4/inode.c | 5 +++--
> 1 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 8dbf695..5a130b5 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -4580,9 +4580,10 @@ static int ext4_indirect_trans_blocks(struct inode *inode, int nrblocks,
> static int ext4_index_trans_blocks(struct inode *inode, int nrblocks, int chunk)
> {
> if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL))
> - return ext4_indirect_trans_blocks(inode, nrblocks, 0);
> - return ext4_ext_index_trans_blocks(inode, nrblocks, 0);
> + return ext4_indirect_trans_blocks(inode, nrblocks, chunk);
> + return ext4_ext_index_trans_blocks(inode, nrblocks, chunk);
> }
> +
> /*
> * Account for index blocks, block groups bitmaps and block group
> * descriptor blocks if modify datablocks and index blocks
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-11-13 0:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-03 0:48 JBD2/ext4 error Joseph Fannin
2008-11-03 3:39 ` Theodore Tso
2008-11-06 19:51 ` [PATCH] ext4: calculate journal credits correctly Theodore Ts'o
2008-11-13 0:03 ` Mingming Cao [this message]
2008-11-23 14:32 ` Aneesh Kumar K.V
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=1226534622.12488.25.camel@mingming-laptop \
--to=cmm@us.ibm.com \
--cc=aneesh.kumar@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/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.