All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: <fdmanana@gmail.com>
Cc: "linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>
Subject: Re: [PATCH 6/7] btrfs-progs: Print warning message if qgroup data is inconsistent.
Date: Mon, 1 Jun 2015 09:25:52 +0800	[thread overview]
Message-ID: <556BB4A0.5050305@cn.fujitsu.com> (raw)
In-Reply-To: <CAL3q7H7yZyUXAsK41e1ZAwVsV3WB8_XNJR_sQ4p8UZLfEM5hDA@mail.gmail.com>



-------- Original Message  --------
Subject: Re: [PATCH 6/7] btrfs-progs: Print warning message if qgroup 
data is inconsistent.
From: Filipe David Manana <fdmanana@gmail.com>
To: Qu Wenruo <quwenruo@cn.fujitsu.com>
Date: 2015年05月30日 19:39

> On Fri, Feb 27, 2015 at 8:26 AM, Qu Wenruo <quwenruo@cn.fujitsu.com> wrote:
>> Before this patch, qgroup show won't check btrfs qgroup status, so even
>> the INCONSISTENT flags is set, user is not aware of it.
>>
>> This patch will include BTRFS_QGROUP_STATUS_ITEM in the search range and
>> check the flag, if there is any flag meaning the inconsistence of qgroup
>> data, info user.
>>
>> NOTE: There is several kernel bugs from INCONSISTENT flags is always set
>> to RUNNING flags is not cleared until umount.
>> So this warning will always be here if using a newer kernel fixing these
>> bugs.
>>
>> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
>> ---
>>   qgroup.c | 26 ++++++++++++++++++++++++--
>>   1 file changed, 24 insertions(+), 2 deletions(-)
>>
>> diff --git a/qgroup.c b/qgroup.c
>> index 7288365..4173846 100644
>> --- a/qgroup.c
>> +++ b/qgroup.c
>> @@ -1016,6 +1016,20 @@ static void __filter_and_sort_qgroups(struct qgroup_lookup *all_qgroups,
>>                  n = rb_prev(n);
>>          }
>>   }
>> +
>> +static inline void print_status_flag_warning(u64 flags)
>> +{
>> +       if (!(flags & BTRFS_QGROUP_STATUS_FLAG_ON))
>> +               fprintf(stderr,
>> +               "WARNING: Quota disabled, qgroup data may be out of date\n");
>> +       else if (flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)
>> +               fprintf(stderr,
>> +               "WARNING: Rescan is running, qgroup data may be incorrect\n");
>
> Hi Qu, did you ran xfstests? Did btrfs/022 passed for you?
>
> btrfs/022 47s ... - output mismatch (see
> /home/fdmanana/git/hub/xfstests/results//btrfs/022.out.bad)
>      --- tests/btrfs/022.out 2014-11-17 20:59:51.178203000 +0000
>      +++ /home/fdmanana/git/hub/xfstests/results//btrfs/022.out.bad
> 2015-05-30 12:35:55.917146846 +0100
>      @@ -1,2 +1,3 @@
>       QA output created by 022
>      +WARNING: Rescan is running, qgroup data may be incorrect
>       Silence is golden
>      ...
>      (Run 'diff -u tests/btrfs/022.out
> /home/fdmanana/git/hub/xfstests/results//btrfs/022.out.bad'  to see
> the entire diff)
>
> thanks
Unfortunately, it's quite hard to trigger in my environment.
I tried about 15 times, and can only trigger it once.

Any hint about mount options or other things to improve the reproducibility?

Thanks,
Qu
>
>
>> +       else if (flags & BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT)
>> +               fprintf(stderr,
>> +               "WARNING: Qgroup data inconsistent, rescan recommended\n");
>> +}
>> +
>>   static int __qgroups_search(int fd, struct qgroup_lookup *qgroup_lookup)
>>   {
>>          int ret;
>> @@ -1039,7 +1053,7 @@ static int __qgroups_search(int fd, struct qgroup_lookup *qgroup_lookup)
>>
>>          sk->tree_id = BTRFS_QUOTA_TREE_OBJECTID;
>>          sk->max_type = BTRFS_QGROUP_RELATION_KEY;
>> -       sk->min_type = BTRFS_QGROUP_INFO_KEY;
>> +       sk->min_type = BTRFS_QGROUP_STATUS_KEY;
>>          sk->max_objectid = (u64)-1;
>>          sk->max_offset = (u64)-1;
>>          sk->max_transid = (u64)-1;
>> @@ -1070,7 +1084,15 @@ static int __qgroups_search(int fd, struct qgroup_lookup *qgroup_lookup)
>>                                                                    off);
>>                          off += sizeof(*sh);
>>
>> -                       if (sh->type == BTRFS_QGROUP_INFO_KEY) {
>> +                       if (sh->type == BTRFS_QGROUP_STATUS_KEY) {
>> +                               struct btrfs_qgroup_status_item *si;
>> +                               u64 flags;
>> +
>> +                               si = (struct btrfs_qgroup_status_item *)
>> +                                    (args.buf + off);
>> +                               flags = btrfs_stack_qgroup_status_flags(si);
>> +                               print_status_flag_warning(flags);
>> +                       } else if (sh->type == BTRFS_QGROUP_INFO_KEY) {
>>                                  info = (struct btrfs_qgroup_info_item *)
>>                                         (args.buf + off);
>>                                  a1 = btrfs_stack_qgroup_info_generation(info);
>> --
>> 2.3.0
>>
>> --
>> 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
>
>
>

  parent reply	other threads:[~2015-06-01  1:25 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-27  8:26 [PATCH 0/7] btrfs-progs: qgroup related enhance Qu Wenruo
2015-02-27  8:26 ` [PATCH 1/7] btrfs-progs: Update qgroup status flags and replace qgroup level/subvid calculation with inline function Qu Wenruo
2015-02-27  8:26 ` [PATCH 2/7] btrfs-progs: Allow btrfs-debug-tree to print human readable qgroup status flag Qu Wenruo
2015-02-27  8:26 ` [PATCH 3/7] btrfs-progs: Move parse_qgroupid() to utils.c Qu Wenruo
2015-02-27  8:26 ` [PATCH 4/7] btrfs-progs: Allow parse_qgroupid() to resolve subvolume path into qgroupid Qu Wenruo
     [not found]   ` <B6A95DD2-413F-4C43-8A9B-048713D62BCC@gmail.com>
2015-02-27  8:51     ` Qu Wenruo
2015-02-27  8:26 ` [PATCH 5/7] btrfs-progs: Add stack get/set functions for btrfs_qgroup_status_item Qu Wenruo
2015-02-27  8:26 ` [PATCH 6/7] btrfs-progs: Print warning message if qgroup data is inconsistent Qu Wenruo
2015-05-30 11:39   ` Filipe David Manana
2015-06-01  0:31     ` Qu Wenruo
2015-06-01  1:25     ` Qu Wenruo [this message]
2015-06-01  7:49       ` Filipe David Manana
2015-06-03  7:10     ` [PATCH] xfstests: btrfs: 022: add a quota rescan -w to wait rescan finished Dongsheng Yang
2015-06-03  7:10       ` Dongsheng Yang
2015-06-03  7:12       ` Dongsheng Yang
2015-06-03  7:12         ` Dongsheng Yang
2015-06-03 15:53       ` Filipe David Manana
2015-02-27  8:26 ` [PATCH 7/7] btrfs-progs: Schedule quota rescan if qgroup assign caused inconsistence Qu Wenruo
2015-03-23 23:38 ` [PATCH 0/7] btrfs-progs: qgroup related enhance David Sterba
2015-03-24  0:36   ` Qu Wenruo
2015-07-27 14:35     ` David Sterba
2015-07-28  0:25       ` 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=556BB4A0.5050305@cn.fujitsu.com \
    --to=quwenruo@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 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.