From: Jan Schmidt <list.btrfs@jan-o-sch.net>
To: Liu Bo <bo.li.liu@oracle.com>
Cc: chris.mason@fusionio.com, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 2/6] Btrfs: fix a tree mod logging issue for root replacement operations
Date: Tue, 23 Oct 2012 17:51:07 +0200 [thread overview]
Message-ID: <5086BCEB.1070600@jan-o-sch.net> (raw)
In-Reply-To: <5086B7A5.106@oracle.com>
On Tue, October 23, 2012 at 17:28 (+0200), Liu Bo wrote:
> On 10/23/2012 09:55 PM, Jan Schmidt wrote:
>> Avoid the implicit free by tree_mod_log_set_root_pointer, which is wrong in
>> two places. Where needed, we call tree_mod_log_free_eb explicitly now.
>>
>> Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
>> ---
>> fs/btrfs/ctree.c | 10 ++--------
>> 1 files changed, 2 insertions(+), 8 deletions(-)
>>
>> diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
>> index 44a7e25..e6b75cc 100644
>> --- a/fs/btrfs/ctree.c
>> +++ b/fs/btrfs/ctree.c
>> @@ -647,8 +647,6 @@ tree_mod_log_insert_root(struct btrfs_fs_info *fs_info,
>> if (tree_mod_dont_log(fs_info, NULL))
>> return 0;
>>
>> - __tree_mod_log_free_eb(fs_info, old_root);
>> -
>> ret = tree_mod_alloc(fs_info, flags, &tm);
>> if (ret < 0)
>> goto out;
>> @@ -926,12 +924,7 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
>> ret = btrfs_dec_ref(trans, root, buf, 1, 1);
>> BUG_ON(ret); /* -ENOMEM */
>> }
>> - /*
>> - * don't log freeing in case we're freeing the root node, this
>> - * is done by tree_mod_log_set_root_pointer later
>> - */
>> - if (buf != root->node && btrfs_header_level(buf) != 0)
>> - tree_mod_log_free_eb(root->fs_info, buf);
>> + tree_mod_log_free_eb(root->fs_info, buf);
>
> Since we've owned a check for if eb's level is 0 in tree_mod_dont_log(),
> we can also get rid of these level checks in other places, can't we?
We can, yes. There may be hot paths where its worth an extra check to save the
overhead. That would require looking closer at the individual sites. Here it
definitely wasn't worth any extra check, so I dropped it en passant.
Thanks for reviewing and testing!
-Jan
>> clean_tree_block(trans, root, buf);
>> *last_ref = 1;
>> }
>> @@ -1728,6 +1721,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
>> goto enospc;
>> }
>>
>> + tree_mod_log_free_eb(root->fs_info, root->node);
>> tree_mod_log_set_root_pointer(root, child);
>> rcu_assign_pointer(root->node, child);
>>
>>
>
> Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
> Tested-by: Liu Bo <bo.li.liu@oracle.com>
>
> thanks,
> liubo
next prev parent reply other threads:[~2012-10-23 15:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-23 13:55 [PATCH 0/6] Btrfs: tree mod log fixes for 3.7-rc3 Jan Schmidt
2012-10-23 13:55 ` [PATCH 1/6] Btrfs: don't put removals from push_node_left into tree mod log twice Jan Schmidt
2012-10-23 15:23 ` Liu Bo
2012-10-23 13:55 ` [PATCH 2/6] Btrfs: fix a tree mod logging issue for root replacement operations Jan Schmidt
2012-10-23 15:28 ` Liu Bo
2012-10-23 15:51 ` Jan Schmidt [this message]
2012-10-23 13:55 ` [PATCH 3/6] Btrfs: tree mod log's old roots could still be part of the tree Jan Schmidt
2012-10-23 15:30 ` Liu Bo
2012-10-24 9:55 ` Liu Bo
2012-10-24 10:45 ` [PATCH] Btrfs: drop locks before calling read_tree_block from get_old_root Jan Schmidt
2012-10-24 14:18 ` Liu Bo
2012-10-23 13:55 ` [PATCH 4/6] Btrfs: determine level of old roots Jan Schmidt
2012-10-23 15:31 ` Liu Bo
2012-10-23 13:55 ` [PATCH 5/6] Btrfs: fix extent buffer reference for tree mod log roots Jan Schmidt
2012-10-23 15:32 ` Liu Bo
2012-10-23 13:55 ` [PATCH 6/6] Btrfs: comment for loop in tree_mod_log_insert_move Jan Schmidt
2012-10-23 15:32 ` Liu Bo
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=5086BCEB.1070600@jan-o-sch.net \
--to=list.btrfs@jan-o-sch.net \
--cc=bo.li.liu@oracle.com \
--cc=chris.mason@fusionio.com \
--cc=linux-btrfs@vger.kernel.org \
/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.