* [PATCH] Btrfs: handle quota reserve failure properly
@ 2016-09-15 18:57 Josef Bacik
2016-09-16 9:02 ` Holger Hoffstätte
2016-09-19 18:50 ` Jeff Mahoney
0 siblings, 2 replies; 6+ messages in thread
From: Josef Bacik @ 2016-09-15 18:57 UTC (permalink / raw)
To: linux-btrfs, kernel-team
btrfs/022 was spitting a warning for the case that we exceed the quota. If we
fail to make our quota reservation we need to clean up our data space
reservation. Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
---
fs/btrfs/extent-tree.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 03da2f6..d72eaae 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
if (ret < 0)
return ret;
- /*
- * Use new btrfs_qgroup_reserve_data to reserve precious data space
- *
- * TODO: Find a good method to avoid reserve data space for NOCOW
- * range, but don't impact performance on quota disable case.
- */
+ /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
ret = btrfs_qgroup_reserve_data(inode, start, len);
+ if (ret)
+ btrfs_free_reserved_data_space_noquota(inode, start, len);
return ret;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] Btrfs: handle quota reserve failure properly
2016-09-15 18:57 [PATCH] Btrfs: handle quota reserve failure properly Josef Bacik
@ 2016-09-16 9:02 ` Holger Hoffstätte
2016-09-19 18:08 ` David Sterba
2016-09-19 18:50 ` Jeff Mahoney
1 sibling, 1 reply; 6+ messages in thread
From: Holger Hoffstätte @ 2016-09-16 9:02 UTC (permalink / raw)
To: linux-btrfs
On Thu, 15 Sep 2016 14:57:48 -0400, Josef Bacik wrote:
> btrfs/022 was spitting a warning for the case that we exceed the quota. If we
> fail to make our quota reservation we need to clean up our data space
> reservation. Thanks,
>
> Signed-off-by: Josef Bacik <jbacik@fb.com>
> ---
> fs/btrfs/extent-tree.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index 03da2f6..d72eaae 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
> if (ret < 0)
> return ret;
>
> - /*
> - * Use new btrfs_qgroup_reserve_data to reserve precious data space
> - *
> - * TODO: Find a good method to avoid reserve data space for NOCOW
> - * range, but don't impact performance on quota disable case.
> - */
> + /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
> ret = btrfs_qgroup_reserve_data(inode, start, len);
> + if (ret)
> + btrfs_free_reserved_data_space_noquota(inode, start, len);
> return ret;
> }
>
> --
> 2.7.4
This came up before, though slightly different:
http://www.spinics.net/lists/linux-btrfs/msg56644.html
Which version is correct - with or without _noquota ?
-h
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Btrfs: handle quota reserve failure properly
2016-09-16 9:02 ` Holger Hoffstätte
@ 2016-09-19 18:08 ` David Sterba
2016-09-20 0:33 ` Qu Wenruo
0 siblings, 1 reply; 6+ messages in thread
From: David Sterba @ 2016-09-19 18:08 UTC (permalink / raw)
To: Holger Hoffstätte; +Cc: linux-btrfs
On Fri, Sep 16, 2016 at 09:02:22AM +0000, Holger Hoffstätte wrote:
> On Thu, 15 Sep 2016 14:57:48 -0400, Josef Bacik wrote:
>
> > btrfs/022 was spitting a warning for the case that we exceed the quota. If we
> > fail to make our quota reservation we need to clean up our data space
> > reservation. Thanks,
> >
> > Signed-off-by: Josef Bacik <jbacik@fb.com>
> > ---
> > fs/btrfs/extent-tree.c | 9 +++------
> > 1 file changed, 3 insertions(+), 6 deletions(-)
> >
> > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> > index 03da2f6..d72eaae 100644
> > --- a/fs/btrfs/extent-tree.c
> > +++ b/fs/btrfs/extent-tree.c
> > @@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
> > if (ret < 0)
> > return ret;
> >
> > - /*
> > - * Use new btrfs_qgroup_reserve_data to reserve precious data space
> > - *
> > - * TODO: Find a good method to avoid reserve data space for NOCOW
> > - * range, but don't impact performance on quota disable case.
> > - */
> > + /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
> > ret = btrfs_qgroup_reserve_data(inode, start, len);
> > + if (ret)
> > + btrfs_free_reserved_data_space_noquota(inode, start, len);
> > return ret;
> > }
> >
> > --
> > 2.7.4
>
> This came up before, though slightly different:
> http://www.spinics.net/lists/linux-btrfs/msg56644.html
>
> Which version is correct - with or without _noquota ?
Seems that it's the _noquota variant.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Btrfs: handle quota reserve failure properly
2016-09-19 18:08 ` David Sterba
@ 2016-09-20 0:33 ` Qu Wenruo
0 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2016-09-20 0:33 UTC (permalink / raw)
To: dsterba, Holger Hoffstätte, linux-btrfs
At 09/20/2016 02:08 AM, David Sterba wrote:
> On Fri, Sep 16, 2016 at 09:02:22AM +0000, Holger Hoffstätte wrote:
>> On Thu, 15 Sep 2016 14:57:48 -0400, Josef Bacik wrote:
>>
>>> btrfs/022 was spitting a warning for the case that we exceed the quota. If we
>>> fail to make our quota reservation we need to clean up our data space
>>> reservation. Thanks,
>>>
>>> Signed-off-by: Josef Bacik <jbacik@fb.com>
>>> ---
>>> fs/btrfs/extent-tree.c | 9 +++------
>>> 1 file changed, 3 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>>> index 03da2f6..d72eaae 100644
>>> --- a/fs/btrfs/extent-tree.c
>>> +++ b/fs/btrfs/extent-tree.c
>>> @@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
>>> if (ret < 0)
>>> return ret;
>>>
>>> - /*
>>> - * Use new btrfs_qgroup_reserve_data to reserve precious data space
>>> - *
>>> - * TODO: Find a good method to avoid reserve data space for NOCOW
>>> - * range, but don't impact performance on quota disable case.
>>> - */
>>> + /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
>>> ret = btrfs_qgroup_reserve_data(inode, start, len);
>>> + if (ret)
>>> + btrfs_free_reserved_data_space_noquota(inode, start, len);
>>> return ret;
>>> }
>>>
>>> --
>>> 2.7.4
>>
>> This came up before, though slightly different:
>> http://www.spinics.net/lists/linux-btrfs/msg56644.html
>>
>> Which version is correct - with or without _noquota ?
>
> Seems that it's the _noquota variant.
Josef and David is right, _noquota variant is more proper.
The case is, if the start, len range covers some already reserved range,
then such free will also free such range.
Causing the reserved range being freed too early.
Thanks,
Qu
> --
> 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
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Btrfs: handle quota reserve failure properly
2016-09-15 18:57 [PATCH] Btrfs: handle quota reserve failure properly Josef Bacik
2016-09-16 9:02 ` Holger Hoffstätte
@ 2016-09-19 18:50 ` Jeff Mahoney
2016-09-20 0:35 ` Chris Mason
1 sibling, 1 reply; 6+ messages in thread
From: Jeff Mahoney @ 2016-09-19 18:50 UTC (permalink / raw)
To: Josef Bacik, linux-btrfs, kernel-team
[-- Attachment #1.1: Type: text/plain, Size: 1280 bytes --]
On 9/15/16 2:57 PM, Josef Bacik wrote:
> btrfs/022 was spitting a warning for the case that we exceed the quota. If we
> fail to make our quota reservation we need to clean up our data space
> reservation. Thanks,
>
> Signed-off-by: Josef Bacik <jbacik@fb.com>
> ---
> fs/btrfs/extent-tree.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index 03da2f6..d72eaae 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
> if (ret < 0)
> return ret;
>
> - /*
> - * Use new btrfs_qgroup_reserve_data to reserve precious data space
> - *
> - * TODO: Find a good method to avoid reserve data space for NOCOW
> - * range, but don't impact performance on quota disable case.
> - */
> + /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
> ret = btrfs_qgroup_reserve_data(inode, start, len);
> + if (ret)
> + btrfs_free_reserved_data_space_noquota(inode, start, len);
> return ret;
> }
>
>
Tested-by: Jeff Mahoney <jeffm@suse.com>
btrfs/022 passes now.
Thanks,
-Jeff
--
Jeff Mahoney
SUSE Labs
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 881 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Btrfs: handle quota reserve failure properly
2016-09-19 18:50 ` Jeff Mahoney
@ 2016-09-20 0:35 ` Chris Mason
0 siblings, 0 replies; 6+ messages in thread
From: Chris Mason @ 2016-09-20 0:35 UTC (permalink / raw)
To: Jeff Mahoney, Josef Bacik, linux-btrfs, kernel-team
On 09/19/2016 02:50 PM, Jeff Mahoney wrote:
> On 9/15/16 2:57 PM, Josef Bacik wrote:
>> btrfs/022 was spitting a warning for the case that we exceed the quota. If we
>> fail to make our quota reservation we need to clean up our data space
>> reservation. Thanks,
>>
>> Signed-off-by: Josef Bacik <jbacik@fb.com>
>> ---
>> fs/btrfs/extent-tree.c | 9 +++------
>> 1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>> index 03da2f6..d72eaae 100644
>> --- a/fs/btrfs/extent-tree.c
>> +++ b/fs/btrfs/extent-tree.c
>> @@ -4286,13 +4286,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
>> if (ret < 0)
>> return ret;
>>
>> - /*
>> - * Use new btrfs_qgroup_reserve_data to reserve precious data space
>> - *
>> - * TODO: Find a good method to avoid reserve data space for NOCOW
>> - * range, but don't impact performance on quota disable case.
>> - */
>> + /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
>> ret = btrfs_qgroup_reserve_data(inode, start, len);
>> + if (ret)
>> + btrfs_free_reserved_data_space_noquota(inode, start, len);
>> return ret;
>> }
>>
>>
>
> Tested-by: Jeff Mahoney <jeffm@suse.com>
>
> btrfs/022 passes now.
>
Thanks guys, I'll get this in for -final.
-chris
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-09-20 0:36 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-15 18:57 [PATCH] Btrfs: handle quota reserve failure properly Josef Bacik
2016-09-16 9:02 ` Holger Hoffstätte
2016-09-19 18:08 ` David Sterba
2016-09-20 0:33 ` Qu Wenruo
2016-09-19 18:50 ` Jeff Mahoney
2016-09-20 0:35 ` Chris Mason
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).