All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ted Ts'o <tytso@mit.edu>
To: Yongqiang Yang <xiaoqiangnk@gmail.com>
Cc: linux-ext4@vger.kernel.org
Subject: Re: [PATCH 2/5] ext4: let ext4 journal deletion of data blocks
Date: Wed, 28 Dec 2011 12:23:24 -0500	[thread overview]
Message-ID: <20111228172324.GB12370@thunk.org> (raw)
In-Reply-To: <1321344474-14707-2-git-send-email-xiaoqiangnk@gmail.com>

On Tue, Nov 15, 2011 at 04:07:51PM +0800, Yongqiang Yang wrote:
> This patch lets ext4 journal deletion of data blocks. Besides this,
> a unnecessary variable is removed.
> 
> Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>

I don't see the point of this patch; it seems to be a code
simplification, but in fact it introduces a bug which has to get fixed
in patch 3/5 of this series.

The code here is a little arcane, because if bh is non-null, then
count must be 1.  This is expressed in the BUG_ON found in the
function:

>  		BUG_ON(bh && (count > 1));

The reason for this bit of complexity is to avoid needing to call
sb_find_get_block() in those places where we have the buffer_head
already.  This happens in exactly two locations: in an error cleanup
path in fs/ext4/indirect.c, and when releasing an xattr block in
ext4_xattr_release_block().

The better way of dealing with this is to drop the bh argument from
ext4_free_blocks() completely, and explicitly call ext4_forget() on
the bh in those two functions.

This will require changing all of the call sites of
ext4_free_blocks(), but it simplifies the function signature as well
as simplifying the code.

					- Ted

>  fs/ext4/mballoc.c |    7 ++-----
>  1 files changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index e2d8be8..2529efc 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -4562,19 +4562,16 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode,
>  	trace_ext4_free_blocks(inode, block, count, flags);
>  
>  	if (flags & EXT4_FREE_BLOCKS_FORGET) {
> -		struct buffer_head *tbh = bh;
>  		int i;
>  
>  		BUG_ON(bh && (count > 1));
>  
>  		for (i = 0; i < count; i++) {
>  			if (!bh)
> -				tbh = sb_find_get_block(inode->i_sb,
> +				bh = sb_find_get_block(inode->i_sb,
>  							block + i);
> -			if (unlikely(!tbh))
> -				continue;
>  			ext4_forget(handle, flags & EXT4_FREE_BLOCKS_METADATA,
> -				    inode, tbh, block + i);
> +				    inode, bh, block + i);
>  		}
>  	}
>  
> -- 
> 1.7.5.1
> 

  reply	other threads:[~2011-12-28 17:23 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-15  8:07 [PATCH 1/5] ext4: allocate delalloc blocks before changing journal mode Yongqiang Yang
2011-11-15  8:07 ` [PATCH 2/5] ext4: let ext4 journal deletion of data blocks Yongqiang Yang
2011-12-28 17:23   ` Ted Ts'o [this message]
2011-12-30 14:59     ` Yongqiang Yang
2011-12-30 15:05       ` Ted Ts'o
2011-11-15  8:07 ` [PATCH 3/5] ext4: let ext4_free_blocks handle multiblock correctly Yongqiang Yang
2011-12-28 17:23   ` Ted Ts'o
2011-11-15  8:07 ` [PATCH 4/5] ext4: flush journal when switching from journal data mode Yongqiang Yang
2011-12-28 18:56   ` Ted Ts'o
2011-12-29 21:01     ` Darrick J. Wong
2011-12-30 14:43       ` Yongqiang Yang
2011-12-30 14:57       ` Ted Ts'o
2011-11-15  8:07 ` [PATCH 5/5] jbd2: clear revoked flag on buffers before a new transaction started Yongqiang Yang
2011-12-28 23:25   ` Ted Ts'o
2011-12-09  3:31 ` [PATCH 1/5] ext4: allocate delalloc blocks before changing journal mode Toshiyuki Okajima
2011-12-28 17:14 ` Ted Ts'o

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=20111228172324.GB12370@thunk.org \
    --to=tytso@mit.edu \
    --cc=linux-ext4@vger.kernel.org \
    --cc=xiaoqiangnk@gmail.com \
    /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.