[PATCH 1/3] btrfs: Cleanup no_quota parameter

2015-10-26 Thread Qu Wenruo
No_quota parameter for delayed_ref related function are meaningless
after 4.2-rc1, as any new delayed_ref_head will cause qgroup to scan
extent for its rfer/excl change without checking no_quota flag.

So this patch will clean them up.

Signed-off-by: Qu Wenruo 
---
 fs/btrfs/ctree.h   |  4 ++--
 fs/btrfs/delayed-ref.c | 26 ++
 fs/btrfs/delayed-ref.h |  7 ++
 fs/btrfs/extent-tree.c | 45 ++---
 fs/btrfs/file.c| 10 -
 fs/btrfs/inode.c   |  4 ++--
 fs/btrfs/ioctl.c   | 60 +-
 fs/btrfs/relocation.c  | 16 ++
 fs/btrfs/tree-log.c|  2 +-
 9 files changed, 43 insertions(+), 131 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index bc3c711..3fa3c3b 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3422,7 +3422,7 @@ int btrfs_set_disk_extent_flags(struct btrfs_trans_handle 
*trans,
 int btrfs_free_extent(struct btrfs_trans_handle *trans,
  struct btrfs_root *root,
  u64 bytenr, u64 num_bytes, u64 parent, u64 root_objectid,
- u64 owner, u64 offset, int no_quota);
+ u64 owner, u64 offset);
 
 int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len,
   int delalloc);
@@ -3435,7 +3435,7 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle 
*trans,
 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
 struct btrfs_root *root,
 u64 bytenr, u64 num_bytes, u64 parent,
-u64 root_objectid, u64 owner, u64 offset, int 
no_quota);
+u64 root_objectid, u64 owner, u64 offset);
 
 int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
   struct btrfs_root *root);
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index bd9b63b..449974f 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -292,8 +292,7 @@ add_delayed_ref_tail_merge(struct btrfs_trans_handle *trans,
exist = list_entry(href->ref_list.prev, struct btrfs_delayed_ref_node,
   list);
/* No need to compare bytenr nor is_head */
-   if (exist->type != ref->type || exist->no_quota != ref->no_quota ||
-   exist->seq != ref->seq)
+   if (exist->type != ref->type || exist->seq != ref->seq)
goto add_tail;
 
if ((exist->type == BTRFS_TREE_BLOCK_REF_KEY ||
@@ -526,7 +525,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
 struct btrfs_delayed_ref_head *head_ref,
 struct btrfs_delayed_ref_node *ref, u64 bytenr,
 u64 num_bytes, u64 parent, u64 ref_root, int level,
-int action, int no_quota)
+int action)
 {
struct btrfs_delayed_tree_ref *full_ref;
struct btrfs_delayed_ref_root *delayed_refs;
@@ -548,7 +547,6 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
ref->action = action;
ref->is_head = 0;
ref->in_tree = 1;
-   ref->no_quota = no_quota;
ref->seq = seq;
 
full_ref = btrfs_delayed_node_to_tree_ref(ref);
@@ -581,7 +579,7 @@ add_delayed_data_ref(struct btrfs_fs_info *fs_info,
 struct btrfs_delayed_ref_head *head_ref,
 struct btrfs_delayed_ref_node *ref, u64 bytenr,
 u64 num_bytes, u64 parent, u64 ref_root, u64 owner,
-u64 offset, int action, int no_quota)
+u64 offset, int action)
 {
struct btrfs_delayed_data_ref *full_ref;
struct btrfs_delayed_ref_root *delayed_refs;
@@ -604,7 +602,6 @@ add_delayed_data_ref(struct btrfs_fs_info *fs_info,
ref->action = action;
ref->is_head = 0;
ref->in_tree = 1;
-   ref->no_quota = no_quota;
ref->seq = seq;
 
full_ref = btrfs_delayed_node_to_data_ref(ref);
@@ -635,17 +632,13 @@ int btrfs_add_delayed_tree_ref(struct btrfs_fs_info 
*fs_info,
   struct btrfs_trans_handle *trans,
   u64 bytenr, u64 num_bytes, u64 parent,
   u64 ref_root,  int level, int action,
-  struct btrfs_delayed_extent_op *extent_op,
-  int no_quota)
+  struct btrfs_delayed_extent_op *extent_op)
 {
struct btrfs_delayed_tree_ref *ref;
struct btrfs_delayed_ref_head *head_ref;
struct btrfs_delayed_ref_root *delayed_refs;
struct btrfs_qgroup_extent_record *record = NULL;
 
-   if (!is_fstree(ref_root) || !fs_info->quota_enabled)
-   no_quota = 0;
-
BUG_ON(extent_op && extent_op->is_data);
ref = kmem_cache_alloc(btrfs_delayed_tree_ref_cachep, GFP_NOFS);

Re: [PATCH 1/3] btrfs: Cleanup no_quota parameter

2015-10-26 Thread Qu Wenruo



Filipe Manana wrote on 2015/10/26 08:14 +:

On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruo  wrote:

No_quota parameter for delayed_ref related function are meaningless
after 4.2-rc1, as any new delayed_ref_head will cause qgroup to scan
extent for its rfer/excl change without checking no_quota flag.

So this patch will clean them up.


Hi Qu,

I already send a patch for this yesterday:
https://patchwork.kernel.org/patch/7481901/


Sorry, I didn't notice the patch also removed no_quota...



This is more than a cleanup, it fixes several bugs. The most important
is crashes (BUG_ON) when running delayed references, mostly triggered
during balance. The second one is a deadlock in the clone ioctl
(reported at http://www.spinics.net/lists/linux-btrfs/msg45844.html).

The use of no_quota was also buggy in at least 2 places:

 1) At delayed-refs.c:btrfs_add_delayed_tree_ref() - we were setting
no_quota to 0 instead of 1 when the following condition was true:
is_fstree(ref_root) || !fs_info->quota_enabled

 2) At extent-tree.c:__btrfs_inc_extent_ref() - we were attempting to
reset a node's no_quota when the condition "!is_fstree(root_objectid)
|| !root->fs_info->quota_enabled" was true but we did it only in
an unused local stack variable, that is, we never reset the no_quota
value in the node itself.

I want to get this to stable, together with the other delayed
references fix, as a lot of people are unable to run balance as of
kernel 4.2+.


Sorry again for the regression I brought in 4.2.
The rework for delayed_ref implement is not important at all, and in 
fact new qgroup accounting could work completely well without them.



I'll update the changelog to reflect the clone ioctl deadlock issue,
which I previously forgot.

thanks



That would be great.

BTW what about split the patch into no_quota cleanup and other fixes?
It's not that obvious if they are all put into one patch.

Thanks,
Qu





Signed-off-by: Qu Wenruo 
---
  fs/btrfs/ctree.h   |  4 ++--
  fs/btrfs/delayed-ref.c | 26 ++
  fs/btrfs/delayed-ref.h |  7 ++
  fs/btrfs/extent-tree.c | 45 ++---
  fs/btrfs/file.c| 10 -
  fs/btrfs/inode.c   |  4 ++--
  fs/btrfs/ioctl.c   | 60 +-
  fs/btrfs/relocation.c  | 16 ++
  fs/btrfs/tree-log.c|  2 +-
  9 files changed, 43 insertions(+), 131 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index bc3c711..3fa3c3b 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3422,7 +3422,7 @@ int btrfs_set_disk_extent_flags(struct btrfs_trans_handle 
*trans,
  int btrfs_free_extent(struct btrfs_trans_handle *trans,
   struct btrfs_root *root,
   u64 bytenr, u64 num_bytes, u64 parent, u64 root_objectid,
- u64 owner, u64 offset, int no_quota);
+ u64 owner, u64 offset);

  int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len,
int delalloc);
@@ -3435,7 +3435,7 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle 
*trans,
  int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
  struct btrfs_root *root,
  u64 bytenr, u64 num_bytes, u64 parent,
-u64 root_objectid, u64 owner, u64 offset, int 
no_quota);
+u64 root_objectid, u64 owner, u64 offset);

  int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
struct btrfs_root *root);
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index bd9b63b..449974f 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -292,8 +292,7 @@ add_delayed_ref_tail_merge(struct btrfs_trans_handle *trans,
 exist = list_entry(href->ref_list.prev, struct btrfs_delayed_ref_node,
list);
 /* No need to compare bytenr nor is_head */
-   if (exist->type != ref->type || exist->no_quota != ref->no_quota ||
-   exist->seq != ref->seq)
+   if (exist->type != ref->type || exist->seq != ref->seq)
 goto add_tail;

 if ((exist->type == BTRFS_TREE_BLOCK_REF_KEY ||
@@ -526,7 +525,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
  struct btrfs_delayed_ref_head *head_ref,
  struct btrfs_delayed_ref_node *ref, u64 bytenr,
  u64 num_bytes, u64 parent, u64 ref_root, int level,
-int action, int no_quota)
+int action)
  {
 struct btrfs_delayed_tree_ref *full_ref;
 struct btrfs_delayed_ref_root *delayed_refs;
@@ -548,7 +547,6 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
 ref->action = action;
 ref->is_head = 0;
 

Re: [PATCH 1/3] btrfs: Cleanup no_quota parameter

2015-10-26 Thread Filipe Manana
On Mon, Oct 26, 2015 at 8:25 AM, Qu Wenruo  wrote:
>
>
> Filipe Manana wrote on 2015/10/26 08:14 +:
>>
>> On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruo 
>> wrote:
>>>
>>> No_quota parameter for delayed_ref related function are meaningless
>>> after 4.2-rc1, as any new delayed_ref_head will cause qgroup to scan
>>> extent for its rfer/excl change without checking no_quota flag.
>>>
>>> So this patch will clean them up.
>>
>>
>> Hi Qu,
>>
>> I already send a patch for this yesterday:
>> https://patchwork.kernel.org/patch/7481901/
>
>
> Sorry, I didn't notice the patch also removed no_quota...
>
>>
>> This is more than a cleanup, it fixes several bugs. The most important
>> is crashes (BUG_ON) when running delayed references, mostly triggered
>> during balance. The second one is a deadlock in the clone ioctl
>> (reported at http://www.spinics.net/lists/linux-btrfs/msg45844.html).
>>
>> The use of no_quota was also buggy in at least 2 places:
>>
>>  1) At delayed-refs.c:btrfs_add_delayed_tree_ref() - we were setting
>> no_quota to 0 instead of 1 when the following condition was true:
>> is_fstree(ref_root) || !fs_info->quota_enabled
>>
>>  2) At extent-tree.c:__btrfs_inc_extent_ref() - we were attempting to
>> reset a node's no_quota when the condition
>> "!is_fstree(root_objectid)
>> || !root->fs_info->quota_enabled" was true but we did it only in
>> an unused local stack variable, that is, we never reset the
>> no_quota
>> value in the node itself.
>>
>> I want to get this to stable, together with the other delayed
>> references fix, as a lot of people are unable to run balance as of
>> kernel 4.2+.
>
>
> Sorry again for the regression I brought in 4.2.
> The rework for delayed_ref implement is not important at all, and in fact
> new qgroup accounting could work completely well without them.
>
>> I'll update the changelog to reflect the clone ioctl deadlock issue,
>> which I previously forgot.
>>
>> thanks
>>
>
> That would be great.
>
> BTW what about split the patch into no_quota cleanup and other fixes?

No point in doing that. Fixing the balance regression requires
removing the whole no_quota thing, fixing those 2 bugs it had alone,
won't fix the problem leading to the BUG_ON.

> It's not that obvious if they are all put into one patch.
>
> Thanks,
> Qu
>
>
>>
>>>
>>> Signed-off-by: Qu Wenruo 
>>> ---
>>>   fs/btrfs/ctree.h   |  4 ++--
>>>   fs/btrfs/delayed-ref.c | 26 ++
>>>   fs/btrfs/delayed-ref.h |  7 ++
>>>   fs/btrfs/extent-tree.c | 45 ++---
>>>   fs/btrfs/file.c| 10 -
>>>   fs/btrfs/inode.c   |  4 ++--
>>>   fs/btrfs/ioctl.c   | 60
>>> +-
>>>   fs/btrfs/relocation.c  | 16 ++
>>>   fs/btrfs/tree-log.c|  2 +-
>>>   9 files changed, 43 insertions(+), 131 deletions(-)
>>>
>>> diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
>>> index bc3c711..3fa3c3b 100644
>>> --- a/fs/btrfs/ctree.h
>>> +++ b/fs/btrfs/ctree.h
>>> @@ -3422,7 +3422,7 @@ int btrfs_set_disk_extent_flags(struct
>>> btrfs_trans_handle *trans,
>>>   int btrfs_free_extent(struct btrfs_trans_handle *trans,
>>>struct btrfs_root *root,
>>>u64 bytenr, u64 num_bytes, u64 parent, u64
>>> root_objectid,
>>> - u64 owner, u64 offset, int no_quota);
>>> + u64 owner, u64 offset);
>>>
>>>   int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64
>>> len,
>>> int delalloc);
>>> @@ -3435,7 +3435,7 @@ int btrfs_finish_extent_commit(struct
>>> btrfs_trans_handle *trans,
>>>   int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
>>>   struct btrfs_root *root,
>>>   u64 bytenr, u64 num_bytes, u64 parent,
>>> -u64 root_objectid, u64 owner, u64 offset, int
>>> no_quota);
>>> +u64 root_objectid, u64 owner, u64 offset);
>>>
>>>   int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
>>> struct btrfs_root *root);
>>> diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
>>> index bd9b63b..449974f 100644
>>> --- a/fs/btrfs/delayed-ref.c
>>> +++ b/fs/btrfs/delayed-ref.c
>>> @@ -292,8 +292,7 @@ add_delayed_ref_tail_merge(struct btrfs_trans_handle
>>> *trans,
>>>  exist = list_entry(href->ref_list.prev, struct
>>> btrfs_delayed_ref_node,
>>> list);
>>>  /* No need to compare bytenr nor is_head */
>>> -   if (exist->type != ref->type || exist->no_quota != ref->no_quota
>>> ||
>>> -   exist->seq != ref->seq)
>>> +   if (exist->type != ref->type || exist->seq != ref->seq)
>>>  goto add_tail;
>>>
>>>  if ((exist->type == 

Re: [PATCH 1/3] btrfs: Cleanup no_quota parameter

2015-10-26 Thread Qu Wenruo



Qu Wenruo wrote on 2015/10/26 16:25 +0800:



Filipe Manana wrote on 2015/10/26 08:14 +:

On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruo 
wrote:

No_quota parameter for delayed_ref related function are meaningless
after 4.2-rc1, as any new delayed_ref_head will cause qgroup to scan
extent for its rfer/excl change without checking no_quota flag.

So this patch will clean them up.


Hi Qu,

I already send a patch for this yesterday:
https://patchwork.kernel.org/patch/7481901/


Sorry, I didn't notice the patch also removed no_quota...



This is more than a cleanup, it fixes several bugs. The most important
is crashes (BUG_ON) when running delayed references, mostly triggered
during balance. The second one is a deadlock in the clone ioctl
(reported at http://www.spinics.net/lists/linux-btrfs/msg45844.html).

The use of no_quota was also buggy in at least 2 places:

 1) At delayed-refs.c:btrfs_add_delayed_tree_ref() - we were setting
no_quota to 0 instead of 1 when the following condition was true:
is_fstree(ref_root) || !fs_info->quota_enabled

 2) At extent-tree.c:__btrfs_inc_extent_ref() - we were attempting to
reset a node's no_quota when the condition
"!is_fstree(root_objectid)
|| !root->fs_info->quota_enabled" was true but we did it only in
an unused local stack variable, that is, we never reset the
no_quota
value in the node itself.

I want to get this to stable, together with the other delayed
references fix, as a lot of people are unable to run balance as of
kernel 4.2+.


Sorry again for the regression I brought in 4.2.
The rework for delayed_ref implement is not important at all, and in
fact new qgroup accounting could work completely well without them.


I'll update the changelog to reflect the clone ioctl deadlock issue,
which I previously forgot.

thanks



That would be great.

BTW what about split the patch into no_quota cleanup and other fixes?
It's not that obvious if they are all put into one patch.


Just forget it...
The cleanup itself will fix them all

Thanks,
Qu



Thanks,
Qu





Signed-off-by: Qu Wenruo 
---
  fs/btrfs/ctree.h   |  4 ++--
  fs/btrfs/delayed-ref.c | 26 ++
  fs/btrfs/delayed-ref.h |  7 ++
  fs/btrfs/extent-tree.c | 45 ++---
  fs/btrfs/file.c| 10 -
  fs/btrfs/inode.c   |  4 ++--
  fs/btrfs/ioctl.c   | 60
+-
  fs/btrfs/relocation.c  | 16 ++
  fs/btrfs/tree-log.c|  2 +-
  9 files changed, 43 insertions(+), 131 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index bc3c711..3fa3c3b 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3422,7 +3422,7 @@ int btrfs_set_disk_extent_flags(struct
btrfs_trans_handle *trans,
  int btrfs_free_extent(struct btrfs_trans_handle *trans,
   struct btrfs_root *root,
   u64 bytenr, u64 num_bytes, u64 parent, u64
root_objectid,
- u64 owner, u64 offset, int no_quota);
+ u64 owner, u64 offset);

  int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start,
u64 len,
int delalloc);
@@ -3435,7 +3435,7 @@ int btrfs_finish_extent_commit(struct
btrfs_trans_handle *trans,
  int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
  struct btrfs_root *root,
  u64 bytenr, u64 num_bytes, u64 parent,
-u64 root_objectid, u64 owner, u64 offset,
int no_quota);
+u64 root_objectid, u64 owner, u64 offset);

  int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
struct btrfs_root *root);
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index bd9b63b..449974f 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -292,8 +292,7 @@ add_delayed_ref_tail_merge(struct
btrfs_trans_handle *trans,
 exist = list_entry(href->ref_list.prev, struct
btrfs_delayed_ref_node,
list);
 /* No need to compare bytenr nor is_head */
-   if (exist->type != ref->type || exist->no_quota !=
ref->no_quota ||
-   exist->seq != ref->seq)
+   if (exist->type != ref->type || exist->seq != ref->seq)
 goto add_tail;

 if ((exist->type == BTRFS_TREE_BLOCK_REF_KEY ||
@@ -526,7 +525,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
  struct btrfs_delayed_ref_head *head_ref,
  struct btrfs_delayed_ref_node *ref, u64 bytenr,
  u64 num_bytes, u64 parent, u64 ref_root, int
level,
-int action, int no_quota)
+int action)
  {
 struct btrfs_delayed_tree_ref *full_ref;
 struct btrfs_delayed_ref_root *delayed_refs;
@@ -548,7 +547,6 @@ 

Re: [PATCH 1/3] btrfs: Cleanup no_quota parameter

2015-10-26 Thread Filipe Manana
On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruo  wrote:
> No_quota parameter for delayed_ref related function are meaningless
> after 4.2-rc1, as any new delayed_ref_head will cause qgroup to scan
> extent for its rfer/excl change without checking no_quota flag.
>
> So this patch will clean them up.

Hi Qu,

I already send a patch for this yesterday:
https://patchwork.kernel.org/patch/7481901/

This is more than a cleanup, it fixes several bugs. The most important
is crashes (BUG_ON) when running delayed references, mostly triggered
during balance. The second one is a deadlock in the clone ioctl
(reported at http://www.spinics.net/lists/linux-btrfs/msg45844.html).

The use of no_quota was also buggy in at least 2 places:

1) At delayed-refs.c:btrfs_add_delayed_tree_ref() - we were setting
   no_quota to 0 instead of 1 when the following condition was true:
   is_fstree(ref_root) || !fs_info->quota_enabled

2) At extent-tree.c:__btrfs_inc_extent_ref() - we were attempting to
   reset a node's no_quota when the condition "!is_fstree(root_objectid)
   || !root->fs_info->quota_enabled" was true but we did it only in
   an unused local stack variable, that is, we never reset the no_quota
   value in the node itself.

I want to get this to stable, together with the other delayed
references fix, as a lot of people are unable to run balance as of
kernel 4.2+.
I'll update the changelog to reflect the clone ioctl deadlock issue,
which I previously forgot.

thanks


>
> Signed-off-by: Qu Wenruo 
> ---
>  fs/btrfs/ctree.h   |  4 ++--
>  fs/btrfs/delayed-ref.c | 26 ++
>  fs/btrfs/delayed-ref.h |  7 ++
>  fs/btrfs/extent-tree.c | 45 ++---
>  fs/btrfs/file.c| 10 -
>  fs/btrfs/inode.c   |  4 ++--
>  fs/btrfs/ioctl.c   | 60 
> +-
>  fs/btrfs/relocation.c  | 16 ++
>  fs/btrfs/tree-log.c|  2 +-
>  9 files changed, 43 insertions(+), 131 deletions(-)
>
> diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
> index bc3c711..3fa3c3b 100644
> --- a/fs/btrfs/ctree.h
> +++ b/fs/btrfs/ctree.h
> @@ -3422,7 +3422,7 @@ int btrfs_set_disk_extent_flags(struct 
> btrfs_trans_handle *trans,
>  int btrfs_free_extent(struct btrfs_trans_handle *trans,
>   struct btrfs_root *root,
>   u64 bytenr, u64 num_bytes, u64 parent, u64 
> root_objectid,
> - u64 owner, u64 offset, int no_quota);
> + u64 owner, u64 offset);
>
>  int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len,
>int delalloc);
> @@ -3435,7 +3435,7 @@ int btrfs_finish_extent_commit(struct 
> btrfs_trans_handle *trans,
>  int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
>  struct btrfs_root *root,
>  u64 bytenr, u64 num_bytes, u64 parent,
> -u64 root_objectid, u64 owner, u64 offset, int 
> no_quota);
> +u64 root_objectid, u64 owner, u64 offset);
>
>  int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
>struct btrfs_root *root);
> diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
> index bd9b63b..449974f 100644
> --- a/fs/btrfs/delayed-ref.c
> +++ b/fs/btrfs/delayed-ref.c
> @@ -292,8 +292,7 @@ add_delayed_ref_tail_merge(struct btrfs_trans_handle 
> *trans,
> exist = list_entry(href->ref_list.prev, struct btrfs_delayed_ref_node,
>list);
> /* No need to compare bytenr nor is_head */
> -   if (exist->type != ref->type || exist->no_quota != ref->no_quota ||
> -   exist->seq != ref->seq)
> +   if (exist->type != ref->type || exist->seq != ref->seq)
> goto add_tail;
>
> if ((exist->type == BTRFS_TREE_BLOCK_REF_KEY ||
> @@ -526,7 +525,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
>  struct btrfs_delayed_ref_head *head_ref,
>  struct btrfs_delayed_ref_node *ref, u64 bytenr,
>  u64 num_bytes, u64 parent, u64 ref_root, int level,
> -int action, int no_quota)
> +int action)
>  {
> struct btrfs_delayed_tree_ref *full_ref;
> struct btrfs_delayed_ref_root *delayed_refs;
> @@ -548,7 +547,6 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
> ref->action = action;
> ref->is_head = 0;
> ref->in_tree = 1;
> -   ref->no_quota = no_quota;
> ref->seq = seq;
>
> full_ref = btrfs_delayed_node_to_tree_ref(ref);
> @@ -581,7 +579,7 @@ add_delayed_data_ref(struct btrfs_fs_info *fs_info,
>  struct btrfs_delayed_ref_head *head_ref,
>  struct btrfs_delayed_ref_node *ref, u64 bytenr,
>