All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
To: Josef Bacik <jbacik@fb.com>, <mfasheh@suse.de>
Cc: <linux-btrfs@vger.kernel.org>
Subject: Re: [PATCH 3/3] btrfs: qgroup: fix a wrong parameter of no_quota.
Date: Thu, 26 Feb 2015 14:05:12 +0800	[thread overview]
Message-ID: <54EEB798.1070105@cn.fujitsu.com> (raw)
In-Reply-To: <54DDC62D.4070206@cn.fujitsu.com>

Wait a minute, this patch seems not working well in accounting quota 
number when
deleting data shared by different subvolumes.

I will investigate more about it and send a V2 out.

Thanx
Yang

On 02/13/2015 05:38 PM, Dongsheng Yang wrote:hen
> Hi Josef and Mark,
>
> I saw the commit message of 1152651a:
>
> [btrfs: qgroup: account shared subtrees during snapshot delete]
>
> that SUBTREE operation was introduced to account the quota number
> in subvolume deleting.
>
> But, I found it does not work well currently:
>
> Create subvolume '/mnt/sub'
> + btrfs qgroup show -prce /mnt
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16.00KiB 16.00KiB 0.00B 0.00B --- ---
> 0/257 16.00KiB 16.00KiB 0.00B 0.00B --- ---
> + dd if=/dev/zero of=/mnt/sub/data bs=1024 count=100
> 100+0 records in
> 100+0 records out
> 102400 bytes (102 kB) copied, 0.000876526 s, 117 MB/s
> + sync
> + btrfs qgroup show -prce --raw /mnt
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16384 16384 0 0 --- ---
> 0/257 118784 118784 0 0 --- ---
> + btrfs sub snap /mnt/sub /mnt/snap
> Create a snapshot of '/mnt/sub' in '/mnt/snap'
> + sync
> + btrfs qgroup show -prce --raw /mnt
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16384 16384 0 0 --- ---
> 0/257 118784 16384 0 0 --- ---
> 0/258 118784 16384 0 0 --- ---
> + btrfs sub delete /mnt/sub
> Delete subvolume (no-commit): '/mnt/sub'
> + sync
> + btrfs qgroup show -prce --raw /mnt
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16384 16384 0 0 --- ---
> 0/257 118784 16384 0 0 --- ---
> 0/258 118784 16384 0 0 --- ---
>
> --------------------------------------------------------------------------- 
> <------- WAIT for cleaner
> [root@atest-guest linux_btrfs]# btrfs qgroup show -prce /mnt
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16.00KiB 16.00KiB 0.00B 0.00B --- ---
> 0/257 100.00KiB 0.00B 0.00B 0.00B --- --- <------- the data size was 
> not cleaned from qgroup.
> 0/258 116.00KiB 116.00KiB 0.00B 0.00B --- --- <------- but the excl in 
> the snapshot qgroup is increased to 116KB by SUBTREE operation
>
> My question is:
> (1), SUBTREE is not working well.
> (2), why we need a rule-breaker in qgroup operations SUBTREE to do 
> this work?
> We can do it via the delayed-ref routine like the other qgroup 
> operations.
>
> with my patch here applied and 1152651a reverted, I got the result:
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 16.00KiB 16.00KiB 0.00B 0.00B --- ---
> 0/257 0.00B 0.00B 0.00B 0.00B --- --- <----------- data and tree block 
> both are cleaned
> 0/258 116.00KiB 116.00KiB 0.00B 0.00B --- --- <------ quota numbers in 
> snapshot qgroup is correct.
>
> (1), quota is working well now in subvolume deleting.
> (2), all operations are inserted by delayed-ref.
>
> So, the conclusion seems like that:
> (1), commit 1152651a was introducing a SUBTREE operation to account 
> the number in subvolume deleted.
> (2). SUBTREE is not working well.
> (3). we can solve the same problem in a better way without introducing 
> a new operation of SUBTREE.
>
> To be honest, I am suspecting myself *very much*. I trust you guys and 
> believe there must be something I am missing.
>
> Then I send this mail to ask your help.
>
> Thanx in advance.
> Yang
>
>
> On 02/10/2015 06:24 PM, Dongsheng Yang wrote:
>> In function of __btrfs_mod_ref(), we are passing the no_quota=1
>> to process_func() anyway. It will make the numbers in qgroup be
>> wrong when deleting a subvolume. The data size in a deleted subvolume
>> will never be decressed from all related qgroups.
>>
>> Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
>> ---
>>   fs/btrfs/extent-tree.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>> index 652be74..f59809c 100644
>> --- a/fs/btrfs/extent-tree.c
>> +++ b/fs/btrfs/extent-tree.c
>> @@ -3056,6 +3056,7 @@ static int __btrfs_mod_ref(struct 
>> btrfs_trans_handle *trans,
>>       int i;
>>       int level;
>>       int ret = 0;
>> +    int no_quota = 0;
>>       int (*process_func)(struct btrfs_trans_handle *, struct 
>> btrfs_root *,
>>                   u64, u64, u64, u64, u64, u64, int);
>>   @@ -3080,6 +3081,9 @@ static int __btrfs_mod_ref(struct 
>> btrfs_trans_handle *trans,
>>       else
>>           parent = 0;
>>   +    if (!root->fs_info->quota_enabled || !is_fstree(ref_root))
>> +        no_quota = 1;
>> +
>>       for (i = 0; i < nritems; i++) {
>>           if (level == 0) {
>>               btrfs_item_key_to_cpu(buf, &key, i);
>> @@ -3098,7 +3102,7 @@ static int __btrfs_mod_ref(struct 
>> btrfs_trans_handle *trans,
>>               key.offset -= btrfs_file_extent_offset(buf, fi);
>>               ret = process_func(trans, root, bytenr, num_bytes,
>>                          parent, ref_root, key.objectid,
>> -                       key.offset, 1);
>> +                       key.offset, no_quota);
>>               if (ret)
>>                   goto fail;
>>           } else {
>> @@ -3106,7 +3110,7 @@ static int __btrfs_mod_ref(struct 
>> btrfs_trans_handle *trans,
>>               num_bytes = root->nodesize;
>>               ret = process_func(trans, root, bytenr, num_bytes,
>>                          parent, ref_root, level - 1, 0,
>> -                       1);
>> +                       no_quota);
>>               if (ret)
>>                   goto fail;
>>           }
>
> -- 
> 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
> .
>


  reply	other threads:[~2015-02-26  6:08 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-10 10:24 [PATCH 0/3] Btrfs: qgroup: part-3: bug fixes for deleting subvolume Dongsheng Yang
2015-02-10 10:24 ` [PATCH 1/3] btrfs: qgroup: return EINVAL if level of parent is not higher than child's Dongsheng Yang
2015-02-10 10:24 ` [PATCH 2/3] btrfs: qgroup: allow to remove qgroup which has parent but no child Dongsheng Yang
2015-02-10 10:24 ` [PATCH 3/3] btrfs: qgroup: fix a wrong parameter of no_quota Dongsheng Yang
2015-02-10 11:24   ` Filipe David Manana
2015-02-11  2:51     ` Dongsheng Yang
2015-02-13  9:38   ` Dongsheng Yang
2015-02-26  6:05     ` Dongsheng Yang [this message]
2015-03-03 11:13       ` [PATCH] fstest: btrfs: add a test for quota number when deleting a subvol Dongsheng Yang
2015-03-03 11:13         ` Dongsheng Yang
2015-03-06  5:06         ` Eryu Guan
2015-03-16  5:06           ` Dongsheng Yang
2015-03-16  5:06             ` Dongsheng Yang
2015-03-16  5:33             ` Eryu Guan
2015-03-16  5:47               ` Dongsheng Yang
2015-03-16  5:47                 ` Dongsheng Yang
2015-03-16  5:58             ` [PATCH v2] " Dongsheng Yang
2015-03-16  5:58               ` Dongsheng Yang
2015-03-03 11:18       ` [PATCH 3/3] btrfs: qgroup: fix a wrong parameter of no_quota Dongsheng Yang
2015-03-03 14:00         ` Josef Bacik
2015-03-03 20:20           ` Mark Fasheh
2015-03-16  4:59             ` Dongsheng Yang
2015-03-17 15:27               ` Dongsheng Yang

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=54EEB798.1070105@cn.fujitsu.com \
    --to=yangds.fnst@cn.fujitsu.com \
    --cc=jbacik@fb.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=mfasheh@suse.de \
    /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.