diff options
author | Josef Bacik <jbacik@fb.com> | 2014-07-02 13:54:25 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-08-15 10:43:11 -0400 |
commit | e339a6b097c515a31ce230d498c44ff2e89f1cf4 (patch) | |
tree | 6195bb6c071eda149030656bf765bbd1f74e7828 /fs | |
parent | ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d (diff) |
Btrfs: __btrfs_mod_ref should always use no_quota
Before I extended the no_quota arg to btrfs_dec/inc_ref because I didn't
understand how snapshot delete was using it and assumed that we needed the
quota operations there. With Mark's work this has turned out to be not the
case, we _always_ need to use no_quota for btrfs_dec/inc_ref, so just drop the
argument and make __btrfs_mod_ref call it's process function with no_quota set
always. Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ctree.c | 20 | ||||
-rw-r--r-- | fs/btrfs/ctree.h | 4 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 24 |
3 files changed, 23 insertions, 25 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index aeab453b8e24..44ee5d2e52a4 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -280,9 +280,9 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, | |||
280 | 280 | ||
281 | WARN_ON(btrfs_header_generation(buf) > trans->transid); | 281 | WARN_ON(btrfs_header_generation(buf) > trans->transid); |
282 | if (new_root_objectid == BTRFS_TREE_RELOC_OBJECTID) | 282 | if (new_root_objectid == BTRFS_TREE_RELOC_OBJECTID) |
283 | ret = btrfs_inc_ref(trans, root, cow, 1, 1); | 283 | ret = btrfs_inc_ref(trans, root, cow, 1); |
284 | else | 284 | else |
285 | ret = btrfs_inc_ref(trans, root, cow, 0, 1); | 285 | ret = btrfs_inc_ref(trans, root, cow, 0); |
286 | 286 | ||
287 | if (ret) | 287 | if (ret) |
288 | return ret; | 288 | return ret; |
@@ -1035,14 +1035,14 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, | |||
1035 | if ((owner == root->root_key.objectid || | 1035 | if ((owner == root->root_key.objectid || |
1036 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && | 1036 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && |
1037 | !(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) { | 1037 | !(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) { |
1038 | ret = btrfs_inc_ref(trans, root, buf, 1, 1); | 1038 | ret = btrfs_inc_ref(trans, root, buf, 1); |
1039 | BUG_ON(ret); /* -ENOMEM */ | 1039 | BUG_ON(ret); /* -ENOMEM */ |
1040 | 1040 | ||
1041 | if (root->root_key.objectid == | 1041 | if (root->root_key.objectid == |
1042 | BTRFS_TREE_RELOC_OBJECTID) { | 1042 | BTRFS_TREE_RELOC_OBJECTID) { |
1043 | ret = btrfs_dec_ref(trans, root, buf, 0, 1); | 1043 | ret = btrfs_dec_ref(trans, root, buf, 0); |
1044 | BUG_ON(ret); /* -ENOMEM */ | 1044 | BUG_ON(ret); /* -ENOMEM */ |
1045 | ret = btrfs_inc_ref(trans, root, cow, 1, 1); | 1045 | ret = btrfs_inc_ref(trans, root, cow, 1); |
1046 | BUG_ON(ret); /* -ENOMEM */ | 1046 | BUG_ON(ret); /* -ENOMEM */ |
1047 | } | 1047 | } |
1048 | new_flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF; | 1048 | new_flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF; |
@@ -1050,9 +1050,9 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, | |||
1050 | 1050 | ||
1051 | if (root->root_key.objectid == | 1051 | if (root->root_key.objectid == |
1052 | BTRFS_TREE_RELOC_OBJECTID) | 1052 | BTRFS_TREE_RELOC_OBJECTID) |
1053 | ret = btrfs_inc_ref(trans, root, cow, 1, 1); | 1053 | ret = btrfs_inc_ref(trans, root, cow, 1); |
1054 | else | 1054 | else |
1055 | ret = btrfs_inc_ref(trans, root, cow, 0, 1); | 1055 | ret = btrfs_inc_ref(trans, root, cow, 0); |
1056 | BUG_ON(ret); /* -ENOMEM */ | 1056 | BUG_ON(ret); /* -ENOMEM */ |
1057 | } | 1057 | } |
1058 | if (new_flags != 0) { | 1058 | if (new_flags != 0) { |
@@ -1069,11 +1069,11 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, | |||
1069 | if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) { | 1069 | if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) { |
1070 | if (root->root_key.objectid == | 1070 | if (root->root_key.objectid == |
1071 | BTRFS_TREE_RELOC_OBJECTID) | 1071 | BTRFS_TREE_RELOC_OBJECTID) |
1072 | ret = btrfs_inc_ref(trans, root, cow, 1, 1); | 1072 | ret = btrfs_inc_ref(trans, root, cow, 1); |
1073 | else | 1073 | else |
1074 | ret = btrfs_inc_ref(trans, root, cow, 0, 1); | 1074 | ret = btrfs_inc_ref(trans, root, cow, 0); |
1075 | BUG_ON(ret); /* -ENOMEM */ | 1075 | BUG_ON(ret); /* -ENOMEM */ |
1076 | ret = btrfs_dec_ref(trans, root, buf, 1, 1); | 1076 | ret = btrfs_dec_ref(trans, root, buf, 1); |
1077 | BUG_ON(ret); /* -ENOMEM */ | 1077 | BUG_ON(ret); /* -ENOMEM */ |
1078 | } | 1078 | } |
1079 | clean_tree_block(trans, root, buf); | 1079 | clean_tree_block(trans, root, buf); |
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index be91397f4e92..8e29b614fe93 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -3326,9 +3326,9 @@ int btrfs_reserve_extent(struct btrfs_root *root, u64 num_bytes, | |||
3326 | u64 min_alloc_size, u64 empty_size, u64 hint_byte, | 3326 | u64 min_alloc_size, u64 empty_size, u64 hint_byte, |
3327 | struct btrfs_key *ins, int is_data, int delalloc); | 3327 | struct btrfs_key *ins, int is_data, int delalloc); |
3328 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 3328 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
3329 | struct extent_buffer *buf, int full_backref, int no_quota); | 3329 | struct extent_buffer *buf, int full_backref); |
3330 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 3330 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
3331 | struct extent_buffer *buf, int full_backref, int no_quota); | 3331 | struct extent_buffer *buf, int full_backref); |
3332 | int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, | 3332 | int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, |
3333 | struct btrfs_root *root, | 3333 | struct btrfs_root *root, |
3334 | u64 bytenr, u64 num_bytes, u64 flags, | 3334 | u64 bytenr, u64 num_bytes, u64 flags, |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 813537f362f9..591893fe58cb 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -3057,7 +3057,7 @@ out: | |||
3057 | static int __btrfs_mod_ref(struct btrfs_trans_handle *trans, | 3057 | static int __btrfs_mod_ref(struct btrfs_trans_handle *trans, |
3058 | struct btrfs_root *root, | 3058 | struct btrfs_root *root, |
3059 | struct extent_buffer *buf, | 3059 | struct extent_buffer *buf, |
3060 | int full_backref, int inc, int no_quota) | 3060 | int full_backref, int inc) |
3061 | { | 3061 | { |
3062 | u64 bytenr; | 3062 | u64 bytenr; |
3063 | u64 num_bytes; | 3063 | u64 num_bytes; |
@@ -3111,7 +3111,7 @@ static int __btrfs_mod_ref(struct btrfs_trans_handle *trans, | |||
3111 | key.offset -= btrfs_file_extent_offset(buf, fi); | 3111 | key.offset -= btrfs_file_extent_offset(buf, fi); |
3112 | ret = process_func(trans, root, bytenr, num_bytes, | 3112 | ret = process_func(trans, root, bytenr, num_bytes, |
3113 | parent, ref_root, key.objectid, | 3113 | parent, ref_root, key.objectid, |
3114 | key.offset, no_quota); | 3114 | key.offset, 1); |
3115 | if (ret) | 3115 | if (ret) |
3116 | goto fail; | 3116 | goto fail; |
3117 | } else { | 3117 | } else { |
@@ -3119,7 +3119,7 @@ static int __btrfs_mod_ref(struct btrfs_trans_handle *trans, | |||
3119 | num_bytes = btrfs_level_size(root, level - 1); | 3119 | num_bytes = btrfs_level_size(root, level - 1); |
3120 | ret = process_func(trans, root, bytenr, num_bytes, | 3120 | ret = process_func(trans, root, bytenr, num_bytes, |
3121 | parent, ref_root, level - 1, 0, | 3121 | parent, ref_root, level - 1, 0, |
3122 | no_quota); | 3122 | 1); |
3123 | if (ret) | 3123 | if (ret) |
3124 | goto fail; | 3124 | goto fail; |
3125 | } | 3125 | } |
@@ -3130,15 +3130,15 @@ fail: | |||
3130 | } | 3130 | } |
3131 | 3131 | ||
3132 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 3132 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
3133 | struct extent_buffer *buf, int full_backref, int no_quota) | 3133 | struct extent_buffer *buf, int full_backref) |
3134 | { | 3134 | { |
3135 | return __btrfs_mod_ref(trans, root, buf, full_backref, 1, no_quota); | 3135 | return __btrfs_mod_ref(trans, root, buf, full_backref, 1); |
3136 | } | 3136 | } |
3137 | 3137 | ||
3138 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 3138 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
3139 | struct extent_buffer *buf, int full_backref, int no_quota) | 3139 | struct extent_buffer *buf, int full_backref) |
3140 | { | 3140 | { |
3141 | return __btrfs_mod_ref(trans, root, buf, full_backref, 0, no_quota); | 3141 | return __btrfs_mod_ref(trans, root, buf, full_backref, 0); |
3142 | } | 3142 | } |
3143 | 3143 | ||
3144 | static int write_one_cache_group(struct btrfs_trans_handle *trans, | 3144 | static int write_one_cache_group(struct btrfs_trans_handle *trans, |
@@ -7532,9 +7532,9 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, | |||
7532 | /* wc->stage == UPDATE_BACKREF */ | 7532 | /* wc->stage == UPDATE_BACKREF */ |
7533 | if (!(wc->flags[level] & flag)) { | 7533 | if (!(wc->flags[level] & flag)) { |
7534 | BUG_ON(!path->locks[level]); | 7534 | BUG_ON(!path->locks[level]); |
7535 | ret = btrfs_inc_ref(trans, root, eb, 1, wc->for_reloc); | 7535 | ret = btrfs_inc_ref(trans, root, eb, 1); |
7536 | BUG_ON(ret); /* -ENOMEM */ | 7536 | BUG_ON(ret); /* -ENOMEM */ |
7537 | ret = btrfs_dec_ref(trans, root, eb, 0, wc->for_reloc); | 7537 | ret = btrfs_dec_ref(trans, root, eb, 0); |
7538 | BUG_ON(ret); /* -ENOMEM */ | 7538 | BUG_ON(ret); /* -ENOMEM */ |
7539 | ret = btrfs_set_disk_extent_flags(trans, root, eb->start, | 7539 | ret = btrfs_set_disk_extent_flags(trans, root, eb->start, |
7540 | eb->len, flag, | 7540 | eb->len, flag, |
@@ -7769,11 +7769,9 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, | |||
7769 | if (wc->refs[level] == 1) { | 7769 | if (wc->refs[level] == 1) { |
7770 | if (level == 0) { | 7770 | if (level == 0) { |
7771 | if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) | 7771 | if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) |
7772 | ret = btrfs_dec_ref(trans, root, eb, 1, | 7772 | ret = btrfs_dec_ref(trans, root, eb, 1); |
7773 | wc->for_reloc); | ||
7774 | else | 7773 | else |
7775 | ret = btrfs_dec_ref(trans, root, eb, 0, | 7774 | ret = btrfs_dec_ref(trans, root, eb, 0); |
7776 | wc->for_reloc); | ||
7777 | BUG_ON(ret); /* -ENOMEM */ | 7775 | BUG_ON(ret); /* -ENOMEM */ |
7778 | } | 7776 | } |
7779 | /* make block locked assertion in clean_tree_block happy */ | 7777 | /* make block locked assertion in clean_tree_block happy */ |