hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/btrfs/inode-item.c
....@@ -8,9 +8,9 @@
88 #include "transaction.h"
99 #include "print-tree.h"
1010
11
-int btrfs_find_name_in_backref(struct extent_buffer *leaf, int slot,
12
- const char *name,
13
- int name_len, struct btrfs_inode_ref **ref_ret)
11
+struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
12
+ int slot, const char *name,
13
+ int name_len)
1414 {
1515 struct btrfs_inode_ref *ref;
1616 unsigned long ptr;
....@@ -28,19 +28,15 @@
2828 cur_offset += len + sizeof(*ref);
2929 if (len != name_len)
3030 continue;
31
- if (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0) {
32
- if (ref_ret)
33
- *ref_ret = ref;
34
- return 1;
35
- }
31
+ if (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0)
32
+ return ref;
3633 }
37
- return 0;
34
+ return NULL;
3835 }
3936
40
-int btrfs_find_name_in_ext_backref(struct extent_buffer *leaf, int slot,
41
- u64 ref_objectid,
42
- const char *name, int name_len,
43
- struct btrfs_inode_extref **extref_ret)
37
+struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
38
+ struct extent_buffer *leaf, int slot, u64 ref_objectid,
39
+ const char *name, int name_len)
4440 {
4541 struct btrfs_inode_extref *extref;
4642 unsigned long ptr;
....@@ -65,15 +61,12 @@
6561
6662 if (ref_name_len == name_len &&
6763 btrfs_inode_extref_parent(leaf, extref) == ref_objectid &&
68
- (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0)) {
69
- if (extref_ret)
70
- *extref_ret = extref;
71
- return 1;
72
- }
64
+ (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0))
65
+ return extref;
7366
7467 cur_offset += ref_name_len + sizeof(*extref);
7568 }
76
- return 0;
69
+ return NULL;
7770 }
7871
7972 /* Returns NULL if no extref found */
....@@ -87,7 +80,6 @@
8780 {
8881 int ret;
8982 struct btrfs_key key;
90
- struct btrfs_inode_extref *extref;
9183
9284 key.objectid = inode_objectid;
9385 key.type = BTRFS_INODE_EXTREF_KEY;
....@@ -98,11 +90,9 @@
9890 return ERR_PTR(ret);
9991 if (ret > 0)
10092 return NULL;
101
- if (!btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0],
102
- ref_objectid, name, name_len,
103
- &extref))
104
- return NULL;
105
- return extref;
93
+ return btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0],
94
+ ref_objectid, name, name_len);
95
+
10696 }
10797
10898 static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
....@@ -142,9 +132,9 @@
142132 * This should always succeed so error here will make the FS
143133 * readonly.
144134 */
145
- if (!btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0],
146
- ref_objectid,
147
- name, name_len, &extref)) {
135
+ extref = btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0],
136
+ ref_objectid, name, name_len);
137
+ if (!extref) {
148138 btrfs_handle_fs_error(root->fs_info, -ENOENT, NULL);
149139 ret = -EROFS;
150140 goto out;
....@@ -170,7 +160,7 @@
170160 memmove_extent_buffer(leaf, ptr, ptr + del_len,
171161 item_size - (ptr + del_len - item_start));
172162
173
- btrfs_truncate_item(root->fs_info, path, item_size - del_len, 1);
163
+ btrfs_truncate_item(path, item_size - del_len, 1);
174164
175165 out:
176166 btrfs_free_path(path);
....@@ -213,8 +203,10 @@
213203 } else if (ret < 0) {
214204 goto out;
215205 }
216
- if (!btrfs_find_name_in_backref(path->nodes[0], path->slots[0],
217
- name, name_len, &ref)) {
206
+
207
+ ref = btrfs_find_name_in_backref(path->nodes[0], path->slots[0], name,
208
+ name_len);
209
+ if (!ref) {
218210 ret = -ENOENT;
219211 search_ext_refs = 1;
220212 goto out;
....@@ -234,7 +226,7 @@
234226 item_start = btrfs_item_ptr_offset(leaf, path->slots[0]);
235227 memmove_extent_buffer(leaf, ptr, ptr + sub_item_len,
236228 item_size - (ptr + sub_item_len - item_start));
237
- btrfs_truncate_item(root->fs_info, path, item_size - sub_item_len, 1);
229
+ btrfs_truncate_item(path, item_size - sub_item_len, 1);
238230 out:
239231 btrfs_free_path(path);
240232
....@@ -285,10 +277,10 @@
285277 if (btrfs_find_name_in_ext_backref(path->nodes[0],
286278 path->slots[0],
287279 ref_objectid,
288
- name, name_len, NULL))
280
+ name, name_len))
289281 goto out;
290282
291
- btrfs_extend_item(root->fs_info, path, ins_len);
283
+ btrfs_extend_item(path, ins_len);
292284 ret = 0;
293285 }
294286 if (ret < 0)
....@@ -341,13 +333,13 @@
341333 ins_len);
342334 if (ret == -EEXIST) {
343335 u32 old_size;
344
-
345
- if (btrfs_find_name_in_backref(path->nodes[0], path->slots[0],
346
- name, name_len, &ref))
336
+ ref = btrfs_find_name_in_backref(path->nodes[0], path->slots[0],
337
+ name, name_len);
338
+ if (ref)
347339 goto out;
348340
349341 old_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]);
350
- btrfs_extend_item(fs_info, path, ins_len);
342
+ btrfs_extend_item(path, ins_len);
351343 ref = btrfs_item_ptr(path->nodes[0], path->slots[0],
352344 struct btrfs_inode_ref);
353345 ref = (struct btrfs_inode_ref *)((unsigned long)ref + old_size);
....@@ -359,7 +351,7 @@
359351 if (ret == -EOVERFLOW) {
360352 if (btrfs_find_name_in_backref(path->nodes[0],
361353 path->slots[0],
362
- name, name_len, &ref))
354
+ name, name_len))
363355 ret = -EEXIST;
364356 else
365357 ret = -EMLINK;