aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2019-04-04 02:45:32 -0400
committerDavid Sterba <dsterba@suse.com>2019-04-29 13:02:49 -0400
commit76675593b69f2fcd57e24d9dd2a9b278f0130d0b (patch)
tree271faff3ae7d8fef25ee41db6720899a45e4a375
parented4f255b9bacb774c99ded17647f138c3f61546d (diff)
btrfs: delayed-ref: Use btrfs_ref to refactor btrfs_add_delayed_data_ref()
Just like btrfs_add_delayed_tree_ref(), use btrfs_ref to refactor btrfs_add_delayed_data_ref(). Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/delayed-ref.c19
-rw-r--r--fs/btrfs/delayed-ref.h7
-rw-r--r--fs/btrfs/extent-tree.c23
3 files changed, 27 insertions, 22 deletions
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index a9c2f469caa9..5c1f2462f757 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -832,10 +832,9 @@ int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
832 * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref. 832 * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref.
833 */ 833 */
834int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans, 834int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
835 u64 bytenr, u64 num_bytes, 835 struct btrfs_ref *generic_ref,
836 u64 parent, u64 ref_root, 836 u64 reserved, int *old_ref_mod,
837 u64 owner, u64 offset, u64 reserved, int action, 837 int *new_ref_mod)
838 int *old_ref_mod, int *new_ref_mod)
839{ 838{
840 struct btrfs_fs_info *fs_info = trans->fs_info; 839 struct btrfs_fs_info *fs_info = trans->fs_info;
841 struct btrfs_delayed_data_ref *ref; 840 struct btrfs_delayed_data_ref *ref;
@@ -843,9 +842,17 @@ int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
843 struct btrfs_delayed_ref_root *delayed_refs; 842 struct btrfs_delayed_ref_root *delayed_refs;
844 struct btrfs_qgroup_extent_record *record = NULL; 843 struct btrfs_qgroup_extent_record *record = NULL;
845 int qrecord_inserted; 844 int qrecord_inserted;
845 int action = generic_ref->action;
846 int ret; 846 int ret;
847 u64 bytenr = generic_ref->bytenr;
848 u64 num_bytes = generic_ref->len;
849 u64 parent = generic_ref->parent;
850 u64 ref_root = generic_ref->data_ref.ref_root;
851 u64 owner = generic_ref->data_ref.ino;
852 u64 offset = generic_ref->data_ref.offset;
847 u8 ref_type; 853 u8 ref_type;
848 854
855 ASSERT(generic_ref->type == BTRFS_REF_DATA && action);
849 ref = kmem_cache_alloc(btrfs_delayed_data_ref_cachep, GFP_NOFS); 856 ref = kmem_cache_alloc(btrfs_delayed_data_ref_cachep, GFP_NOFS);
850 if (!ref) 857 if (!ref)
851 return -ENOMEM; 858 return -ENOMEM;
@@ -869,7 +876,9 @@ int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
869 } 876 }
870 877
871 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) && 878 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) &&
872 is_fstree(ref_root)) { 879 is_fstree(ref_root) &&
880 is_fstree(generic_ref->real_root) &&
881 !generic_ref->skip_qgroup) {
873 record = kzalloc(sizeof(*record), GFP_NOFS); 882 record = kzalloc(sizeof(*record), GFP_NOFS);
874 if (!record) { 883 if (!record) {
875 kmem_cache_free(btrfs_delayed_data_ref_cachep, ref); 884 kmem_cache_free(btrfs_delayed_data_ref_cachep, ref);
diff --git a/fs/btrfs/delayed-ref.h b/fs/btrfs/delayed-ref.h
index 515d1a3d8080..7cbb52adc553 100644
--- a/fs/btrfs/delayed-ref.h
+++ b/fs/btrfs/delayed-ref.h
@@ -337,10 +337,9 @@ int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
337 struct btrfs_delayed_extent_op *extent_op, 337 struct btrfs_delayed_extent_op *extent_op,
338 int *old_ref_mod, int *new_ref_mod); 338 int *old_ref_mod, int *new_ref_mod);
339int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans, 339int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
340 u64 bytenr, u64 num_bytes, 340 struct btrfs_ref *generic_ref,
341 u64 parent, u64 ref_root, 341 u64 reserved, int *old_ref_mod,
342 u64 owner, u64 offset, u64 reserved, int action, 342 int *new_ref_mod);
343 int *old_ref_mod, int *new_ref_mod);
344int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info, 343int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info,
345 struct btrfs_trans_handle *trans, 344 struct btrfs_trans_handle *trans,
346 u64 bytenr, u64 num_bytes, 345 u64 bytenr, u64 num_bytes,
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 88deec012386..cbddd5ab7d65 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2065,10 +2065,8 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
2065 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, 2065 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref,
2066 NULL, &old_ref_mod, &new_ref_mod); 2066 NULL, &old_ref_mod, &new_ref_mod);
2067 } else { 2067 } else {
2068 ret = btrfs_add_delayed_data_ref(trans, bytenr, 2068 btrfs_init_data_ref(&generic_ref, root_objectid, owner, offset);
2069 num_bytes, parent, 2069 ret = btrfs_add_delayed_data_ref(trans, &generic_ref, 0,
2070 root_objectid, owner, offset,
2071 0, BTRFS_ADD_DELAYED_REF,
2072 &old_ref_mod, &new_ref_mod); 2070 &old_ref_mod, &new_ref_mod);
2073 } 2071 }
2074 2072
@@ -7276,10 +7274,8 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans,
7276 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL, 7274 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL,
7277 &old_ref_mod, &new_ref_mod); 7275 &old_ref_mod, &new_ref_mod);
7278 } else { 7276 } else {
7279 ret = btrfs_add_delayed_data_ref(trans, bytenr, 7277 btrfs_init_data_ref(&generic_ref, root_objectid, owner, offset);
7280 num_bytes, parent, 7278 ret = btrfs_add_delayed_data_ref(trans, &generic_ref, 0,
7281 root_objectid, owner, offset,
7282 0, BTRFS_DROP_DELAYED_REF,
7283 &old_ref_mod, &new_ref_mod); 7279 &old_ref_mod, &new_ref_mod);
7284 } 7280 }
7285 7281
@@ -8385,6 +8381,7 @@ int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
8385 u64 offset, u64 ram_bytes, 8381 u64 offset, u64 ram_bytes,
8386 struct btrfs_key *ins) 8382 struct btrfs_key *ins)
8387{ 8383{
8384 struct btrfs_ref generic_ref = { 0 };
8388 int ret; 8385 int ret;
8389 8386
8390 BUG_ON(root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID); 8387 BUG_ON(root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID);
@@ -8393,11 +8390,11 @@ int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
8393 root->root_key.objectid, owner, offset, 8390 root->root_key.objectid, owner, offset,
8394 BTRFS_ADD_DELAYED_EXTENT); 8391 BTRFS_ADD_DELAYED_EXTENT);
8395 8392
8396 ret = btrfs_add_delayed_data_ref(trans, ins->objectid, 8393 btrfs_init_generic_ref(&generic_ref, BTRFS_ADD_DELAYED_EXTENT,
8397 ins->offset, 0, 8394 ins->objectid, ins->offset, 0);
8398 root->root_key.objectid, owner, 8395 btrfs_init_data_ref(&generic_ref, root->root_key.objectid, owner, offset);
8399 offset, ram_bytes, 8396 ret = btrfs_add_delayed_data_ref(trans, &generic_ref,
8400 BTRFS_ADD_DELAYED_EXTENT, NULL, NULL); 8397 ram_bytes, NULL, NULL);
8401 return ret; 8398 return ret;
8402} 8399}
8403 8400