diff options
author | Qu Wenruo <wqu@suse.com> | 2019-04-04 02:45:32 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2019-04-29 13:02:49 -0400 |
commit | 76675593b69f2fcd57e24d9dd2a9b278f0130d0b (patch) | |
tree | 271faff3ae7d8fef25ee41db6720899a45e4a375 | |
parent | ed4f255b9bacb774c99ded17647f138c3f61546d (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.c | 19 | ||||
-rw-r--r-- | fs/btrfs/delayed-ref.h | 7 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 23 |
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 | */ |
834 | int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans, | 834 | int 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); |
339 | int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans, | 339 | int 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); | ||
344 | int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info, | 343 | int 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 | ||