From: Anand Jain <anand.jain@oracle.com>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>, Qu Wenruo <wqu@suse.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v2 2/7] btrfs-progs: Refactor btrfs_read_block_groups()
Date: Thu, 17 Oct 2019 13:08:42 +0800 [thread overview]
Message-ID: <d831e08f-2d40-a650-a7c3-166348e7ab46@oracle.com> (raw)
In-Reply-To: <566f2d81-8454-d4f5-6e73-adbd0ddedf28@gmx.com>
On 10/17/19 12:33 PM, Qu Wenruo wrote:
>
>
> On 2019/10/17 上午11:23, Anand Jain wrote:
>> On 10/8/19 12:49 PM, Qu Wenruo wrote:
>>> This patch does the following refactor:
>>> - Refactor parameter from @root to @fs_info
>>>
>>> - Refactor the large loop body into another function
>>> Now we have a helper function, read_one_block_group(), to handle
>>> block group cache and space info related routine.
>>>
>>> - Refactor the return value
>>> Even we have the code handling ret > 0 from find_first_block_group(),
>>> it never works, as when there is no more block group,
>>> find_first_block_group() just return -ENOENT other than 1.
>>
>>
>> Can it be separated into patches? My concern is as it alters the return
>> value of the rescue command. So we shall have clarity of a discrete
>> patch to blame. Otherwise I agree its a good change.
>
> No problem.
>
> What about 3 patches split by the mentioned 3 refactors?
>>
>>
>>> This is super confusing, it's almost a mircle it even works.
>>>
>>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>>> ---
>>> ctree.h | 2 +-
>>> disk-io.c | 9 ++-
>>> extent-tree.c | 160 ++++++++++++++++++++++++++++----------------------
>>> 3 files changed, 97 insertions(+), 74 deletions(-)
>>>
>>> diff --git a/ctree.h b/ctree.h
>>> index 8c7b3cb40151..2899de358613 100644
>>> --- a/ctree.h
>>> +++ b/ctree.h
>>> @@ -2550,7 +2550,7 @@ int update_space_info(struct btrfs_fs_info
>>> *info, u64 flags,
>>> u64 total_bytes, u64 bytes_used,
>>> struct btrfs_space_info **space_info);
>>> int btrfs_free_block_groups(struct btrfs_fs_info *info);
>>> -int btrfs_read_block_groups(struct btrfs_root *root);
>>> +int btrfs_read_block_groups(struct btrfs_fs_info *info);
>>> struct btrfs_block_group_cache *
>>> btrfs_add_block_group(struct btrfs_fs_info *fs_info, u64 bytes_used,
>>> u64 type,
>>> u64 chunk_offset, u64 size);
>>> diff --git a/disk-io.c b/disk-io.c
>>> index be44eead5cef..8978f0cb60c7 100644
>>> --- a/disk-io.c
>>> +++ b/disk-io.c
>>> @@ -983,14 +983,17 @@ int btrfs_setup_all_roots(struct btrfs_fs_info
>>> *fs_info, u64 root_tree_bytenr,
>>> fs_info->last_trans_committed = generation;
>>> if (extent_buffer_uptodate(fs_info->extent_root->node) &&
>>> !(flags & OPEN_CTREE_NO_BLOCK_GROUPS)) {
>>> - ret = btrfs_read_block_groups(fs_info->tree_root);
>>> + ret = btrfs_read_block_groups(fs_info);
>>> /*
>>> * If we don't find any blockgroups (ENOENT) we're either
>>> * restoring or creating the filesystem, where it's expected,
>>> * anything else is error
>>> */
>>> - if (ret != -ENOENT)
>>> - return -EIO;
>>> + if (ret < 0 && ret != -ENOENT) {
>>> + errno = -ret;
>>> + error("failed to read block groups: %m");
>>> + return ret;
>>> + }
>>> }
>>
>>
>> As mentioned this alters the rescue command semantics as show below.
>> Earlier we had only -EIO as error now its much more and accurate
>> which is good. fstests is fine but anything else?
>>
>> cmd_rescue_chunk_recover()
>> btrfs_recover_chunk_tree()
>> open_ctree_with_broken_chunk()
>> btrfs_setup_all_roots()
>
> I'm not sure if I got the point.
>
> Although btrfs_setup_all_roots() get called in above call chain, it
> doesn't have any special handling of -EIO or others.
>
> It just reads the extent tree root.
>
> Would you mind to explain a little more?
sure.
The above thread is in the call chain of the command
btrfs rescue chunk-recover [options] <device>"
And as the its return error code is being changed for the same problem,
so a separate patch not part of the bg-tree changes would make sense.
Thanks, Anand
next prev parent reply other threads:[~2019-10-17 5:10 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-08 4:49 [PATCH v2 0/7] btrfs-progs: Support for BG_TREE feature Qu Wenruo
2019-10-08 4:49 ` [PATCH v2 1/7] btrfs-progs: Refactor excluded extent functions to use fs_info Qu Wenruo
2019-10-08 9:22 ` Johannes Thumshirn
2019-10-17 2:16 ` Anand Jain
2019-10-08 4:49 ` [PATCH v2 2/7] btrfs-progs: Refactor btrfs_read_block_groups() Qu Wenruo
2019-10-17 3:23 ` Anand Jain
2019-10-17 4:33 ` Qu Wenruo
2019-10-17 5:08 ` Anand Jain [this message]
2019-10-08 4:49 ` [PATCH v2 3/7] btrfs-progs: Enable read-write ability for 'bg_tree' feature Qu Wenruo
2019-10-17 4:56 ` Anand Jain
2019-10-08 4:49 ` [PATCH v2 4/7] btrfs-progs: mkfs: Introduce -O bg-tree Qu Wenruo
2019-10-08 8:16 ` [PATCH v2.1 " Qu Wenruo
2019-10-08 4:49 ` [PATCH v2 5/7] btrfs-progs: dump-tree/dump-super: Introduce support for bg tree Qu Wenruo
2019-10-08 4:49 ` [PATCH v2 6/7] btrfs-progs: check: Introduce support for bg-tree feature Qu Wenruo
2019-10-08 4:49 ` [PATCH v2 7/7] btrfs-progs: btrfstune: Allow to enable bg-tree feature offline Qu Wenruo
2019-10-17 4:17 ` Anand Jain
2019-10-17 4:28 ` Qu Wenruo
2019-10-14 15:17 ` [PATCH v2 0/7] btrfs-progs: Support for BG_TREE feature David Sterba
2019-10-15 0:32 ` Qu Wenruo
2019-10-16 11:16 ` David Sterba
2019-10-16 11:19 ` Qu WenRuo
2019-10-18 17:27 ` David Sterba
2019-10-19 0:04 ` Qu Wenruo
2019-10-21 15:44 ` David Sterba
2019-10-22 0:49 ` Qu Wenruo
2019-10-22 6:30 ` Qu Wenruo
2019-10-22 12:23 ` David Sterba
2019-10-22 12:27 ` Qu Wenruo
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=d831e08f-2d40-a650-a7c3-166348e7ab46@oracle.com \
--to=anand.jain@oracle.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=quwenruo.btrfs@gmx.com \
--cc=wqu@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).