From: Zhao Lei <zhaolei@cn.fujitsu.com>
To: <fdmanana@gmail.com>
Cc: <linux-btrfs@vger.kernel.org>
Subject: RE: [PATCH 1/2] btrfs: Fix lost-data-profile caused by auto removing bg
Date: Wed, 30 Sep 2015 18:06:57 +0800 [thread overview]
Message-ID: <010e01d0fb67$be055c50$3a1014f0$@cn.fujitsu.com> (raw)
In-Reply-To: <CAL3q7H5To-_nEez_yKgLeGt-Ak4mXeSdqgAbSxDJ8cHKtwXFGQ@mail.gmail.com>
Hi, Filipe Manana
> -----Original Message-----
> From: linux-btrfs-owner@vger.kernel.org
> [mailto:linux-btrfs-owner@vger.kernel.org] On Behalf Of Filipe Manana
> Sent: Wednesday, September 30, 2015 3:43 PM
> To: Zhao Lei <zhaolei@cn.fujitsu.com>
> Cc: linux-btrfs@vger.kernel.org
> Subject: Re: [PATCH 1/2] btrfs: Fix lost-data-profile caused by auto removing bg
>
> On Tue, Sep 29, 2015 at 2:51 PM, Zhao Lei <zhaolei@cn.fujitsu.com> wrote:
> > Reproduce:
> > (In integration-4.3 branch)
> >
> > TEST_DEV=(/dev/vdg /dev/vdh)
> > TEST_DIR=/mnt/tmp
> >
> > umount "$TEST_DEV" >/dev/null
> > mkfs.btrfs -f -d raid1 "${TEST_DEV[@]}"
> >
> > mount -o nospace_cache "$TEST_DEV" "$TEST_DIR"
> > umount "$TEST_DEV"
> >
> > mount -o nospace_cache "$TEST_DEV" "$TEST_DIR"
> > btrfs filesystem usage $TEST_DIR
> >
> > We can see the data chunk changed from raid1 to single:
> > # btrfs filesystem usage $TEST_DIR
> > Data,single: Size:8.00MiB, Used:0.00B
> > /dev/vdg 8.00MiB
> > #
> >
> > Reason:
> > When a empty filesystem mount with -o nospace_cache, the last data
> > blockgroup will be auto-removed in umount.
> >
> > Then if we mount it again, there is no data chunk in the filesystem,
> > so the only available data profile is 0x0, result is all new chunks
> > are created as single type.
> >
> > Fix:
> > Don't auto-delete last blockgroup for a raid type.
> >
> > Test:
> > Test by above script, and confirmed the logic by debug output.
> >
> > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
> > ---
> > fs/btrfs/extent-tree.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index
> > 79a5bd9..3505649 100644
> > --- a/fs/btrfs/extent-tree.c
> > +++ b/fs/btrfs/extent-tree.c
> > @@ -10012,7 +10012,8 @@ void btrfs_delete_unused_bgs(struct
> btrfs_fs_info *fs_info)
> > bg_list);
> > space_info = block_group->space_info;
> > list_del_init(&block_group->bg_list);
> > - if (ret || btrfs_mixed_space_info(space_info)) {
> > + if (ret || btrfs_mixed_space_info(space_info) ||
> > + block_group->list.next == block_group->list.prev)
> > + {
>
> This isn't race free. The list block_group->list is protected by the groups_sem
> semaphore. Need to take before doing this check.
Thanks for pointing out this.
> You can do that in the "if" statement below this one, where we're holding
> &space_info->groups_sem [1]
>
It is hard to do check in btrfs_remove_block_group(), because it is common
function used by both balance and auto-remove bg.
For balance operation, we can remove lattest bg in some case, or we need
add additional argument to separate these two operation(complex).
So I decided to take groups_sem semaphore in place of checking.
Thanks for notice this lock problem.
btw, could I add your signed-off-by or reviewed-by in patch 2/2?
Thanks
Zhaolei
> thanks
>
> [1]
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/btrfs/exte
> nt-tree.c?id=refs/tags/v4.3-rc3#n10021
>
> > btrfs_put_block_group(block_group);
> > continue;
> > }
> > --
> > 1.8.5.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
> > in the body of a message to majordomo@vger.kernel.org More majordomo
> > info at http://vger.kernel.org/majordomo-info.html
>
>
>
> --
> Filipe David Manana,
>
> "Reasonable men adapt themselves to the world.
> Unreasonable men adapt the world to themselves.
> That's why all progress depends on unreasonable men."
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" 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:[~2015-09-30 10:07 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-29 13:51 [PATCH 1/2] btrfs: Fix lost-data-profile caused by auto removing bg Zhao Lei
2015-09-29 13:51 ` [PATCH 2/2] btrfs: Fix lost-data-profile caused by balance bg Zhao Lei
2015-09-29 15:47 ` Filipe Manana
2015-09-30 4:20 ` Zhao Lei
2015-09-30 7:41 ` Filipe Manana
2015-09-30 8:26 ` Zhao Lei
2015-09-30 9:44 ` Filipe Manana
2015-09-30 7:42 ` [PATCH 1/2] btrfs: Fix lost-data-profile caused by auto removing bg Filipe Manana
2015-09-30 10:06 ` Zhao Lei [this message]
2015-09-30 10:26 ` Filipe Manana
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='010e01d0fb67$be055c50$3a1014f0$@cn.fujitsu.com' \
--to=zhaolei@cn.fujitsu.com \
--cc=fdmanana@gmail.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 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).