From: Liu Bo <bo.li.liu@oracle.com>
To: Qu Wenruo <quwenruo@cn.fujitsu.com>
Cc: linux-btrfs@vger.kernel.org, David Sterba <dsterba@suse.cz>
Subject: Re: [PATCH] Btrfs: fix endless loop in balancing block groups
Date: Wed, 31 Aug 2016 17:54:07 -0700 [thread overview]
Message-ID: <20160901005407.GA6076@localhost.localdomain> (raw)
In-Reply-To: <1c3b14d3-dd15-238f-8378-a10bdcba394d@cn.fujitsu.com>
On Thu, Sep 01, 2016 at 08:32:00AM +0800, Qu Wenruo wrote:
>
>
> At 09/01/2016 07:43 AM, Liu Bo wrote:
> > Qgroup function may overwrite the saved error 'err' with 0
> > in case quota is not enabled, and this ends up with a
> > endless loop in balance because we keep going back to balance
> > the same block group.
>
> In which case?
>
> If join_trans() fails, we won't go through qgroup fix.
> And before join_trans(), they all go to out_free/out tag.
> Nothing to do with qgroup fix.
I don't think so.
It doesn't always go to out_free, in the while() loop, it'd break the
loop on any error and record it in @err, then go through
prepare_to_merge() + merge_reloc_roots() and other stuff.
Here's an example for keeping err after the above while loop(),
...
err = prepare_to_merge(rc, err);
...
Thanks,
-liubo
>
> And if we hit qgroup_fix_relocated_data_extents(), then 'err' is alreayd 0,
> nothing we need to save.
>
> And even for quota disabled case, qgroup_fix_relocated_data_extents() will
> just return 0. Nothing wrong at all.
>
> Or did I miss something?
>
> Thanks,
> Qu
> >
> > It really should use 'ret' instead.
> >
> > Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
> > ---
> > fs/btrfs/relocation.c | 8 +++++---
> > 1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
> > index 8a2c2a0..c0c13dc 100644
> > --- a/fs/btrfs/relocation.c
> > +++ b/fs/btrfs/relocation.c
> > @@ -4200,9 +4200,11 @@ restart:
> > err = PTR_ERR(trans);
> > goto out_free;
> > }
> > - err = qgroup_fix_relocated_data_extents(trans, rc);
> > - if (err < 0) {
> > - btrfs_abort_transaction(trans, err);
> > + ret = qgroup_fix_relocated_data_extents(trans, rc);
> > + if (ret < 0) {
> > + btrfs_abort_transaction(trans, ret);
> > + if (!err)
> > + err = ret;
> > goto out_free;
> > }
> > btrfs_commit_transaction(trans, rc->extent_root);
> >
>
>
next prev parent reply other threads:[~2016-09-01 0:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-31 23:43 [PATCH] Btrfs: fix endless loop in balancing block groups Liu Bo
2016-09-01 0:32 ` Qu Wenruo
2016-09-01 0:54 ` Liu Bo [this message]
2016-09-01 0:54 ` 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=20160901005407.GA6076@localhost.localdomain \
--to=bo.li.liu@oracle.com \
--cc=dsterba@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=quwenruo@cn.fujitsu.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.