[PATCH 1/3] btrfs: Cleanup no_quota parameter
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
Filipe Manana wrote on 2015/10/26 08:14 +: On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruowrote: 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
On Mon, Oct 26, 2015 at 8:25 AM, Qu Wenruowrote: > > > 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
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 Wenruowrote: 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
On Mon, Oct 26, 2015 at 6:11 AM, Qu Wenruowrote: > 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, >