19 #include <linux/uuid.h>
40 len = btrfs_item_size_nr(eb, slot);
42 min_t(
int, len, (
int)
sizeof(*item)));
43 if (len <
sizeof(*item))
45 if (!need_reset && btrfs_root_generation(item)
46 != btrfs_root_generation_v2(item)) {
47 if (btrfs_root_generation_v2(item) != 0) {
49 "generation and generation_v2 "
50 "found in root item. This root "
51 "was probably mounted with an "
52 "older kernel. Resetting all "
94 if (path->
slots[0] == 0) {
99 slot = path->
slots[0] - 1;
100 btrfs_item_key_to_cpu(l, &found_key, slot);
101 if (found_key.
objectid != objectid ||
109 memcpy(key, &found_key,
sizeof(found_key));
120 btrfs_set_root_bytenr(item, node->
start);
121 btrfs_set_root_level(item, btrfs_header_level(node));
122 btrfs_set_root_generation(item, btrfs_header_generation(node));
153 (
unsigned long long)key->
offset);
158 slot = path->
slots[0];
160 old_len = btrfs_item_size_nr(l, slot);
167 if (old_len <
sizeof(*item)) {
176 ret = btrfs_del_item(trans, root, path);
182 ret = btrfs_insert_empty_item(trans, root, path,
189 slot = path->
slots[0];
197 btrfs_set_root_generation_v2(item, btrfs_root_generation(item));
212 btrfs_set_root_generation_v2(item, btrfs_root_generation(item));
246 leaf = path->
nodes[0];
247 nritems = btrfs_header_nritems(leaf);
248 slot = path->
slots[0];
249 if (slot >= nritems) {
253 leaf = path->
nodes[0];
254 nritems = btrfs_header_nritems(leaf);
255 slot = path->
slots[0];
257 btrfs_item_key_to_cpu(leaf, &key, slot);
268 if (btrfs_disk_root_refs(leaf, ri) != 0)
271 memcpy(&found_key, &key,
sizeof(key));
277 if (IS_ERR(dead_root)) {
278 ret = PTR_ERR(dead_root);
324 leaf = path->
nodes[0];
325 if (path->
slots[0] >= btrfs_header_nritems(leaf)) {
331 leaf = path->
nodes[0];
334 btrfs_item_key_to_cpu(leaf, &key, path->
slots[0]);
383 leaf = path->
nodes[0];
386 ret = btrfs_del_item(trans, root, path);
417 leaf = path->
nodes[0];
421 WARN_ON(btrfs_root_ref_dirid(leaf, ref) != dirid);
422 WARN_ON(btrfs_root_ref_name_len(leaf, ref) != name_len);
423 ptr = (
unsigned long)(ref + 1);
425 *sequence = btrfs_root_ref_sequence(leaf, ref);
427 ret = btrfs_del_item(trans, tree_root, path);
498 ret = btrfs_insert_empty_item(trans, tree_root, path, &key,
499 sizeof(*ref) + name_len);
506 leaf = path->
nodes[0];
508 btrfs_set_root_ref_dirid(leaf, ref, dirid);
509 btrfs_set_root_ref_sequence(leaf, ref, sequence);
510 btrfs_set_root_ref_name_len(leaf, ref, name_len);
511 ptr = (
unsigned long)(ref + 1);
540 root_item->
flags = 0;