From: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
To: Josef Bacik <jbacik@fb.com>, <cyril.scetbon@free.fr>
Cc: <linux-btrfs@vger.kernel.org>
Subject: Re: [PATCH 1/2] Btrfs: qgroup: free reserved in exceeding quota.
Date: Fri, 12 Dec 2014 08:44:10 +0800 [thread overview]
Message-ID: <548A3A5A.2070206@cn.fujitsu.com> (raw)
In-Reply-To: <5489E1A4.30801@fb.com>
On 12/12/2014 02:25 AM, Josef Bacik wrote:
> On 12/10/2014 03:09 AM, Dongsheng Yang wrote:
>> On 12/09/2014 11:42 PM, Josef Bacik wrote:
>>> On 12/09/2014 06:27 AM, Dongsheng Yang wrote:
>>>> When we exceed quota limit in writing, we will free
>>>> some reserved extent when we need to drop but not free
>>>> account in qgroup. It means, each time we exceed quota
>>>> in writing, there will be some remain space in qg->reserved
>>>> we can not use any more. If things go on like this, the
>>>> all space will be ate up.
>>>>
>>>> Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
>>>> ---
>>>> fs/btrfs/extent-tree.c | 5 ++++-
>>>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>>>> index a84e00d..014b7f2 100644
>>>> --- a/fs/btrfs/extent-tree.c
>>>> +++ b/fs/btrfs/extent-tree.c
>>>> @@ -5262,8 +5262,11 @@ out_fail:
>>>> to_free = 0;
>>>> }
>>>> spin_unlock(&BTRFS_I(inode)->lock);
>>>> - if (dropped)
>>>> + if (dropped) {
>>>> + if (root->fs_info->quota_enabled)
>>>> + btrfs_qgroup_free(root, dropped * root->nodesize);
>>>
>>> This needs to be num_bytes + dropped * root->nodesize. Thanks,
>>
>> Let me try to explain why it did not free num_bytes here.
>>
>> In out_fail, we did not reserve num_bytes in qgroup successfully, then
>> we do not need
>> to free it in out_fail.
>>
>> The problem this patch attempts to solve is that, when we run into
>> out_fail here,
>> we will drop a outstanding extent. That said, in out_fail here, the
>> extra reserved
>> nodesize for some extents should be freed.
>>
>> Example:
>> 1). BTRFS_I(inode)->reserved_extents: 2,
>> BTRFS_I(inode)->outstanding_extents: 1.
>> In this case, we go intobtrfs_delalloc_reserve_metadata().
>> outstanding_extents
>> will be increased at first. then
>> BTRFS_I(inode)->outstanding_extents is 2.
>> If we want to reserve space and failed. it will goto
>> out_fail.
>> 2). In out_failed: reserved_extents is 2, outstanding_extents is 2.
>> we will get a dropped of 1
>> from dropping_outstanding_extent(). And now,
>> reserved_extents:1, outstanding_extents:1.
>>
>> In step 2, we just decrease the reserved_extents without freeing the
>> related nodesize in qgroup
>> at the same time. So it will cause the problem I described in changelog
>> which will eat the space.
>>
>> Therefore, this patch here will free the nodesize related with the
>> dropped extents in step 2.
>> About the num_bytes, as we did not reserve it successfully, no need to
>> free it.
>>
>> With my poor english, there must be something confusing in my
>> description. Please correct me
>> if anything is wrong or not-good-explained.
>>
>
> So none of this made sense, I went back and read the code just now and
> this was the part I was missing
>
> if (unlikely(ret)) {
> if (root->fs_info->quota_enabled)
> btrfs_qgroup_free(root, num_bytes +
> nr_extents * root->nodesize);
> goto out_fail;
> }
>
> All you needed to say was we already free up what we reserved, we're
> just dropping anything we needed to free because of
> drop_outstanding_extents ;). You can add
>
> Reviewed-by: Josef Bacik <jbacik@fb.com>
Thanx Josef. :)
>
> Thanks,
>
> Josef
> .
>
next prev parent reply other threads:[~2014-12-12 0:46 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <BA68E495-8B7B-4F0F-A64B-0413B1480B9C@free.fr>
2014-12-09 11:27 ` [PATCH 1/2] Btrfs: qgroup: free reserved in exceeding quota Dongsheng Yang
2014-12-09 11:27 ` [PATCH 2/2] Btrfs: qgroup: Introduce a may_use to account space_info->bytes_may_use Dongsheng Yang
2014-12-09 15:55 ` Josef Bacik
2014-12-10 8:09 ` Dongsheng Yang
2014-12-09 15:42 ` [PATCH 1/2] Btrfs: qgroup: free reserved in exceeding quota Josef Bacik
2014-12-10 8:09 ` Dongsheng Yang
2014-12-11 18:25 ` Josef Bacik
2014-12-12 0:44 ` Dongsheng Yang [this message]
2014-12-12 8:44 ` [PATCH v2 " Dongsheng Yang
2014-12-12 8:44 ` [PATCH v2 2/2] Btrfs: qgroup: Introduce a may_use to account space_info->bytes_may_use Dongsheng Yang
[not found] ` <549CBAB1.3070909@cn.fujitsu.com>
2014-12-26 5:43 ` Satoru Takeuchi
2014-12-26 6:49 ` Dongsheng Yang
2014-12-26 7:00 ` Dongsheng Yang
2014-12-28 2:03 ` Dongsheng Yang
2015-01-05 6:16 ` [PATCH v3 0/3] Btrfs: Enhancment for qgroup Dongsheng Yang
2015-01-05 6:16 ` [PATCH v3 1/3] Btrfs: qgroup: free reserved in exceeding quota Dongsheng Yang
2015-01-05 6:16 ` [PATCH v3 2/3] Btrfs: qgroup: Introduce a may_use to account space_info->bytes_may_use Dongsheng Yang
2015-01-05 6:16 ` [PATCH v3 3/3] Btrfs: qgroup, Account data space in more proper timings Dongsheng Yang
2015-01-07 0:49 ` [PATCH v3 0/3] Btrfs: Enhancment for qgroup Satoru Takeuchi
2015-01-08 3:53 ` 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=548A3A5A.2070206@cn.fujitsu.com \
--to=yangds.fnst@cn.fujitsu.com \
--cc=cyril.scetbon@free.fr \
--cc=jbacik@fb.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.