diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 308 |
1 files changed, 203 insertions, 105 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 4414a5d9983a..ce3ab4e13064 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -45,6 +45,8 @@ struct btrfs_ordered_sum; | |||
45 | 45 | ||
46 | #define BTRFS_MAX_LEVEL 8 | 46 | #define BTRFS_MAX_LEVEL 8 |
47 | 47 | ||
48 | #define BTRFS_COMPAT_EXTENT_TREE_V0 | ||
49 | |||
48 | /* | 50 | /* |
49 | * files bigger than this get some pre-flushing when they are added | 51 | * files bigger than this get some pre-flushing when they are added |
50 | * to the ordered operations list. That way we limit the total | 52 | * to the ordered operations list. That way we limit the total |
@@ -267,7 +269,18 @@ static inline unsigned long btrfs_chunk_item_size(int num_stripes) | |||
267 | } | 269 | } |
268 | 270 | ||
269 | #define BTRFS_FSID_SIZE 16 | 271 | #define BTRFS_FSID_SIZE 16 |
270 | #define BTRFS_HEADER_FLAG_WRITTEN (1 << 0) | 272 | #define BTRFS_HEADER_FLAG_WRITTEN (1ULL << 0) |
273 | #define BTRFS_HEADER_FLAG_RELOC (1ULL << 1) | ||
274 | #define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32) | ||
275 | #define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33) | ||
276 | |||
277 | #define BTRFS_BACKREF_REV_MAX 256 | ||
278 | #define BTRFS_BACKREF_REV_SHIFT 56 | ||
279 | #define BTRFS_BACKREF_REV_MASK (((u64)BTRFS_BACKREF_REV_MAX - 1) << \ | ||
280 | BTRFS_BACKREF_REV_SHIFT) | ||
281 | |||
282 | #define BTRFS_OLD_BACKREF_REV 0 | ||
283 | #define BTRFS_MIXED_BACKREF_REV 1 | ||
271 | 284 | ||
272 | /* | 285 | /* |
273 | * every tree block (leaf or node) starts with this header. | 286 | * every tree block (leaf or node) starts with this header. |
@@ -296,7 +309,6 @@ struct btrfs_header { | |||
296 | sizeof(struct btrfs_item) - \ | 309 | sizeof(struct btrfs_item) - \ |
297 | sizeof(struct btrfs_file_extent_item)) | 310 | sizeof(struct btrfs_file_extent_item)) |
298 | 311 | ||
299 | #define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32) | ||
300 | 312 | ||
301 | /* | 313 | /* |
302 | * this is a very generous portion of the super block, giving us | 314 | * this is a very generous portion of the super block, giving us |
@@ -355,9 +367,12 @@ struct btrfs_super_block { | |||
355 | * Compat flags that we support. If any incompat flags are set other than the | 367 | * Compat flags that we support. If any incompat flags are set other than the |
356 | * ones specified below then we will fail to mount | 368 | * ones specified below then we will fail to mount |
357 | */ | 369 | */ |
358 | #define BTRFS_FEATURE_COMPAT_SUPP 0x0 | 370 | #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0) |
359 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0x0 | 371 | |
360 | #define BTRFS_FEATURE_INCOMPAT_SUPP 0x0 | 372 | #define BTRFS_FEATURE_COMPAT_SUPP 0ULL |
373 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL | ||
374 | #define BTRFS_FEATURE_INCOMPAT_SUPP \ | ||
375 | BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | ||
361 | 376 | ||
362 | /* | 377 | /* |
363 | * A leaf is full of items. offset and size tell us where to find | 378 | * A leaf is full of items. offset and size tell us where to find |
@@ -421,23 +436,65 @@ struct btrfs_path { | |||
421 | unsigned int keep_locks:1; | 436 | unsigned int keep_locks:1; |
422 | unsigned int skip_locking:1; | 437 | unsigned int skip_locking:1; |
423 | unsigned int leave_spinning:1; | 438 | unsigned int leave_spinning:1; |
439 | unsigned int search_commit_root:1; | ||
424 | }; | 440 | }; |
425 | 441 | ||
426 | /* | 442 | /* |
427 | * items in the extent btree are used to record the objectid of the | 443 | * items in the extent btree are used to record the objectid of the |
428 | * owner of the block and the number of references | 444 | * owner of the block and the number of references |
429 | */ | 445 | */ |
446 | |||
430 | struct btrfs_extent_item { | 447 | struct btrfs_extent_item { |
448 | __le64 refs; | ||
449 | __le64 generation; | ||
450 | __le64 flags; | ||
451 | } __attribute__ ((__packed__)); | ||
452 | |||
453 | struct btrfs_extent_item_v0 { | ||
431 | __le32 refs; | 454 | __le32 refs; |
432 | } __attribute__ ((__packed__)); | 455 | } __attribute__ ((__packed__)); |
433 | 456 | ||
434 | struct btrfs_extent_ref { | 457 | #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r) >> 4) - \ |
458 | sizeof(struct btrfs_item)) | ||
459 | |||
460 | #define BTRFS_EXTENT_FLAG_DATA (1ULL << 0) | ||
461 | #define BTRFS_EXTENT_FLAG_TREE_BLOCK (1ULL << 1) | ||
462 | |||
463 | /* following flags only apply to tree blocks */ | ||
464 | |||
465 | /* use full backrefs for extent pointers in the block */ | ||
466 | #define BTRFS_BLOCK_FLAG_FULL_BACKREF (1ULL << 8) | ||
467 | |||
468 | struct btrfs_tree_block_info { | ||
469 | struct btrfs_disk_key key; | ||
470 | u8 level; | ||
471 | } __attribute__ ((__packed__)); | ||
472 | |||
473 | struct btrfs_extent_data_ref { | ||
474 | __le64 root; | ||
475 | __le64 objectid; | ||
476 | __le64 offset; | ||
477 | __le32 count; | ||
478 | } __attribute__ ((__packed__)); | ||
479 | |||
480 | struct btrfs_shared_data_ref { | ||
481 | __le32 count; | ||
482 | } __attribute__ ((__packed__)); | ||
483 | |||
484 | struct btrfs_extent_inline_ref { | ||
485 | u8 type; | ||
486 | u64 offset; | ||
487 | } __attribute__ ((__packed__)); | ||
488 | |||
489 | /* old style backrefs item */ | ||
490 | struct btrfs_extent_ref_v0 { | ||
435 | __le64 root; | 491 | __le64 root; |
436 | __le64 generation; | 492 | __le64 generation; |
437 | __le64 objectid; | 493 | __le64 objectid; |
438 | __le32 num_refs; | 494 | __le32 count; |
439 | } __attribute__ ((__packed__)); | 495 | } __attribute__ ((__packed__)); |
440 | 496 | ||
497 | |||
441 | /* dev extents record free space on individual devices. The owner | 498 | /* dev extents record free space on individual devices. The owner |
442 | * field points back to the chunk allocation mapping tree that allocated | 499 | * field points back to the chunk allocation mapping tree that allocated |
443 | * the extent. The chunk tree uuid field is a way to double check the owner | 500 | * the extent. The chunk tree uuid field is a way to double check the owner |
@@ -695,12 +752,7 @@ struct btrfs_block_group_cache { | |||
695 | struct list_head cluster_list; | 752 | struct list_head cluster_list; |
696 | }; | 753 | }; |
697 | 754 | ||
698 | struct btrfs_leaf_ref_tree { | 755 | struct reloc_control; |
699 | struct rb_root root; | ||
700 | struct list_head list; | ||
701 | spinlock_t lock; | ||
702 | }; | ||
703 | |||
704 | struct btrfs_device; | 756 | struct btrfs_device; |
705 | struct btrfs_fs_devices; | 757 | struct btrfs_fs_devices; |
706 | struct btrfs_fs_info { | 758 | struct btrfs_fs_info { |
@@ -831,18 +883,11 @@ struct btrfs_fs_info { | |||
831 | struct task_struct *cleaner_kthread; | 883 | struct task_struct *cleaner_kthread; |
832 | int thread_pool_size; | 884 | int thread_pool_size; |
833 | 885 | ||
834 | /* tree relocation relocated fields */ | ||
835 | struct list_head dead_reloc_roots; | ||
836 | struct btrfs_leaf_ref_tree reloc_ref_tree; | ||
837 | struct btrfs_leaf_ref_tree shared_ref_tree; | ||
838 | |||
839 | struct kobject super_kobj; | 886 | struct kobject super_kobj; |
840 | struct completion kobj_unregister; | 887 | struct completion kobj_unregister; |
841 | int do_barriers; | 888 | int do_barriers; |
842 | int closing; | 889 | int closing; |
843 | int log_root_recovering; | 890 | int log_root_recovering; |
844 | atomic_t throttles; | ||
845 | atomic_t throttle_gen; | ||
846 | 891 | ||
847 | u64 total_pinned; | 892 | u64 total_pinned; |
848 | 893 | ||
@@ -861,6 +906,8 @@ struct btrfs_fs_info { | |||
861 | */ | 906 | */ |
862 | struct list_head space_info; | 907 | struct list_head space_info; |
863 | 908 | ||
909 | struct reloc_control *reloc_ctl; | ||
910 | |||
864 | spinlock_t delalloc_lock; | 911 | spinlock_t delalloc_lock; |
865 | spinlock_t new_trans_lock; | 912 | spinlock_t new_trans_lock; |
866 | u64 delalloc_bytes; | 913 | u64 delalloc_bytes; |
@@ -891,7 +938,6 @@ struct btrfs_fs_info { | |||
891 | * in ram representation of the tree. extent_root is used for all allocations | 938 | * in ram representation of the tree. extent_root is used for all allocations |
892 | * and for the extent tree extent_root root. | 939 | * and for the extent tree extent_root root. |
893 | */ | 940 | */ |
894 | struct btrfs_dirty_root; | ||
895 | struct btrfs_root { | 941 | struct btrfs_root { |
896 | struct extent_buffer *node; | 942 | struct extent_buffer *node; |
897 | 943 | ||
@@ -899,9 +945,6 @@ struct btrfs_root { | |||
899 | spinlock_t node_lock; | 945 | spinlock_t node_lock; |
900 | 946 | ||
901 | struct extent_buffer *commit_root; | 947 | struct extent_buffer *commit_root; |
902 | struct btrfs_leaf_ref_tree *ref_tree; | ||
903 | struct btrfs_leaf_ref_tree ref_tree_struct; | ||
904 | struct btrfs_dirty_root *dirty_root; | ||
905 | struct btrfs_root *log_root; | 948 | struct btrfs_root *log_root; |
906 | struct btrfs_root *reloc_root; | 949 | struct btrfs_root *reloc_root; |
907 | 950 | ||
@@ -952,10 +995,15 @@ struct btrfs_root { | |||
952 | /* the dirty list is only used by non-reference counted roots */ | 995 | /* the dirty list is only used by non-reference counted roots */ |
953 | struct list_head dirty_list; | 996 | struct list_head dirty_list; |
954 | 997 | ||
998 | struct list_head root_list; | ||
999 | |||
955 | spinlock_t list_lock; | 1000 | spinlock_t list_lock; |
956 | struct list_head dead_list; | ||
957 | struct list_head orphan_list; | 1001 | struct list_head orphan_list; |
958 | 1002 | ||
1003 | spinlock_t inode_lock; | ||
1004 | /* red-black tree that keeps track of in-memory inodes */ | ||
1005 | struct rb_root inode_tree; | ||
1006 | |||
959 | /* | 1007 | /* |
960 | * right now this just gets used so that a root has its own devid | 1008 | * right now this just gets used so that a root has its own devid |
961 | * for stat. It may be used for more later | 1009 | * for stat. It may be used for more later |
@@ -1017,7 +1065,16 @@ struct btrfs_root { | |||
1017 | * are used, and how many references there are to each block | 1065 | * are used, and how many references there are to each block |
1018 | */ | 1066 | */ |
1019 | #define BTRFS_EXTENT_ITEM_KEY 168 | 1067 | #define BTRFS_EXTENT_ITEM_KEY 168 |
1020 | #define BTRFS_EXTENT_REF_KEY 180 | 1068 | |
1069 | #define BTRFS_TREE_BLOCK_REF_KEY 176 | ||
1070 | |||
1071 | #define BTRFS_EXTENT_DATA_REF_KEY 178 | ||
1072 | |||
1073 | #define BTRFS_EXTENT_REF_V0_KEY 180 | ||
1074 | |||
1075 | #define BTRFS_SHARED_BLOCK_REF_KEY 182 | ||
1076 | |||
1077 | #define BTRFS_SHARED_DATA_REF_KEY 184 | ||
1021 | 1078 | ||
1022 | /* | 1079 | /* |
1023 | * block groups give us hints into the extent allocation trees. Which | 1080 | * block groups give us hints into the extent allocation trees. Which |
@@ -1317,24 +1374,67 @@ static inline u8 *btrfs_dev_extent_chunk_tree_uuid(struct btrfs_dev_extent *dev) | |||
1317 | return (u8 *)((unsigned long)dev + ptr); | 1374 | return (u8 *)((unsigned long)dev + ptr); |
1318 | } | 1375 | } |
1319 | 1376 | ||
1320 | /* struct btrfs_extent_ref */ | 1377 | BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64); |
1321 | BTRFS_SETGET_FUNCS(ref_root, struct btrfs_extent_ref, root, 64); | 1378 | BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item, |
1322 | BTRFS_SETGET_FUNCS(ref_generation, struct btrfs_extent_ref, generation, 64); | 1379 | generation, 64); |
1323 | BTRFS_SETGET_FUNCS(ref_objectid, struct btrfs_extent_ref, objectid, 64); | 1380 | BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64); |
1324 | BTRFS_SETGET_FUNCS(ref_num_refs, struct btrfs_extent_ref, num_refs, 32); | ||
1325 | 1381 | ||
1326 | BTRFS_SETGET_STACK_FUNCS(stack_ref_root, struct btrfs_extent_ref, root, 64); | 1382 | BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32); |
1327 | BTRFS_SETGET_STACK_FUNCS(stack_ref_generation, struct btrfs_extent_ref, | 1383 | |
1328 | generation, 64); | 1384 | |
1329 | BTRFS_SETGET_STACK_FUNCS(stack_ref_objectid, struct btrfs_extent_ref, | 1385 | BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8); |
1330 | objectid, 64); | 1386 | |
1331 | BTRFS_SETGET_STACK_FUNCS(stack_ref_num_refs, struct btrfs_extent_ref, | 1387 | static inline void btrfs_tree_block_key(struct extent_buffer *eb, |
1332 | num_refs, 32); | 1388 | struct btrfs_tree_block_info *item, |
1389 | struct btrfs_disk_key *key) | ||
1390 | { | ||
1391 | read_eb_member(eb, item, struct btrfs_tree_block_info, key, key); | ||
1392 | } | ||
1393 | |||
1394 | static inline void btrfs_set_tree_block_key(struct extent_buffer *eb, | ||
1395 | struct btrfs_tree_block_info *item, | ||
1396 | struct btrfs_disk_key *key) | ||
1397 | { | ||
1398 | write_eb_member(eb, item, struct btrfs_tree_block_info, key, key); | ||
1399 | } | ||
1333 | 1400 | ||
1334 | /* struct btrfs_extent_item */ | 1401 | BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref, |
1335 | BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 32); | 1402 | root, 64); |
1336 | BTRFS_SETGET_STACK_FUNCS(stack_extent_refs, struct btrfs_extent_item, | 1403 | BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref, |
1337 | refs, 32); | 1404 | objectid, 64); |
1405 | BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref, | ||
1406 | offset, 64); | ||
1407 | BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref, | ||
1408 | count, 32); | ||
1409 | |||
1410 | BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref, | ||
1411 | count, 32); | ||
1412 | |||
1413 | BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref, | ||
1414 | type, 8); | ||
1415 | BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref, | ||
1416 | offset, 64); | ||
1417 | |||
1418 | static inline u32 btrfs_extent_inline_ref_size(int type) | ||
1419 | { | ||
1420 | if (type == BTRFS_TREE_BLOCK_REF_KEY || | ||
1421 | type == BTRFS_SHARED_BLOCK_REF_KEY) | ||
1422 | return sizeof(struct btrfs_extent_inline_ref); | ||
1423 | if (type == BTRFS_SHARED_DATA_REF_KEY) | ||
1424 | return sizeof(struct btrfs_shared_data_ref) + | ||
1425 | sizeof(struct btrfs_extent_inline_ref); | ||
1426 | if (type == BTRFS_EXTENT_DATA_REF_KEY) | ||
1427 | return sizeof(struct btrfs_extent_data_ref) + | ||
1428 | offsetof(struct btrfs_extent_inline_ref, offset); | ||
1429 | BUG(); | ||
1430 | return 0; | ||
1431 | } | ||
1432 | |||
1433 | BTRFS_SETGET_FUNCS(ref_root_v0, struct btrfs_extent_ref_v0, root, 64); | ||
1434 | BTRFS_SETGET_FUNCS(ref_generation_v0, struct btrfs_extent_ref_v0, | ||
1435 | generation, 64); | ||
1436 | BTRFS_SETGET_FUNCS(ref_objectid_v0, struct btrfs_extent_ref_v0, objectid, 64); | ||
1437 | BTRFS_SETGET_FUNCS(ref_count_v0, struct btrfs_extent_ref_v0, count, 32); | ||
1338 | 1438 | ||
1339 | /* struct btrfs_node */ | 1439 | /* struct btrfs_node */ |
1340 | BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64); | 1440 | BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64); |
@@ -1558,6 +1658,21 @@ static inline int btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag) | |||
1558 | return (flags & flag) == flag; | 1658 | return (flags & flag) == flag; |
1559 | } | 1659 | } |
1560 | 1660 | ||
1661 | static inline int btrfs_header_backref_rev(struct extent_buffer *eb) | ||
1662 | { | ||
1663 | u64 flags = btrfs_header_flags(eb); | ||
1664 | return flags >> BTRFS_BACKREF_REV_SHIFT; | ||
1665 | } | ||
1666 | |||
1667 | static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb, | ||
1668 | int rev) | ||
1669 | { | ||
1670 | u64 flags = btrfs_header_flags(eb); | ||
1671 | flags &= ~BTRFS_BACKREF_REV_MASK; | ||
1672 | flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT; | ||
1673 | btrfs_set_header_flags(eb, flags); | ||
1674 | } | ||
1675 | |||
1561 | static inline u8 *btrfs_header_fsid(struct extent_buffer *eb) | 1676 | static inline u8 *btrfs_header_fsid(struct extent_buffer *eb) |
1562 | { | 1677 | { |
1563 | unsigned long ptr = offsetof(struct btrfs_header, fsid); | 1678 | unsigned long ptr = offsetof(struct btrfs_header, fsid); |
@@ -1790,39 +1905,32 @@ int btrfs_update_pinned_extents(struct btrfs_root *root, | |||
1790 | int btrfs_drop_leaf_ref(struct btrfs_trans_handle *trans, | 1905 | int btrfs_drop_leaf_ref(struct btrfs_trans_handle *trans, |
1791 | struct btrfs_root *root, struct extent_buffer *leaf); | 1906 | struct btrfs_root *root, struct extent_buffer *leaf); |
1792 | int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, | 1907 | int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, |
1793 | struct btrfs_root *root, u64 objectid, u64 bytenr); | 1908 | struct btrfs_root *root, |
1909 | u64 objectid, u64 offset, u64 bytenr); | ||
1794 | int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy); | 1910 | int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy); |
1795 | struct btrfs_block_group_cache *btrfs_lookup_block_group( | 1911 | struct btrfs_block_group_cache *btrfs_lookup_block_group( |
1796 | struct btrfs_fs_info *info, | 1912 | struct btrfs_fs_info *info, |
1797 | u64 bytenr); | 1913 | u64 bytenr); |
1914 | void btrfs_put_block_group(struct btrfs_block_group_cache *cache); | ||
1798 | u64 btrfs_find_block_group(struct btrfs_root *root, | 1915 | u64 btrfs_find_block_group(struct btrfs_root *root, |
1799 | u64 search_start, u64 search_hint, int owner); | 1916 | u64 search_start, u64 search_hint, int owner); |
1800 | struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, | 1917 | struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, |
1801 | struct btrfs_root *root, | 1918 | struct btrfs_root *root, u32 blocksize, |
1802 | u32 blocksize, u64 parent, | 1919 | u64 parent, u64 root_objectid, |
1803 | u64 root_objectid, | 1920 | struct btrfs_disk_key *key, int level, |
1804 | u64 ref_generation, | 1921 | u64 hint, u64 empty_size); |
1805 | int level, | ||
1806 | u64 hint, | ||
1807 | u64 empty_size); | ||
1808 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, | 1922 | struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans, |
1809 | struct btrfs_root *root, | 1923 | struct btrfs_root *root, |
1810 | u64 bytenr, u32 blocksize, | 1924 | u64 bytenr, u32 blocksize, |
1811 | int level); | 1925 | int level); |
1812 | int btrfs_alloc_extent(struct btrfs_trans_handle *trans, | 1926 | int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans, |
1813 | struct btrfs_root *root, | 1927 | struct btrfs_root *root, |
1814 | u64 num_bytes, u64 parent, u64 min_bytes, | 1928 | u64 root_objectid, u64 owner, |
1815 | u64 root_objectid, u64 ref_generation, | 1929 | u64 offset, struct btrfs_key *ins); |
1816 | u64 owner, u64 empty_size, u64 hint_byte, | 1930 | int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans, |
1817 | u64 search_end, struct btrfs_key *ins, u64 data); | 1931 | struct btrfs_root *root, |
1818 | int btrfs_alloc_reserved_extent(struct btrfs_trans_handle *trans, | 1932 | u64 root_objectid, u64 owner, u64 offset, |
1819 | struct btrfs_root *root, u64 parent, | 1933 | struct btrfs_key *ins); |
1820 | u64 root_objectid, u64 ref_generation, | ||
1821 | u64 owner, struct btrfs_key *ins); | ||
1822 | int btrfs_alloc_logged_extent(struct btrfs_trans_handle *trans, | ||
1823 | struct btrfs_root *root, u64 parent, | ||
1824 | u64 root_objectid, u64 ref_generation, | ||
1825 | u64 owner, struct btrfs_key *ins); | ||
1826 | int btrfs_reserve_extent(struct btrfs_trans_handle *trans, | 1934 | int btrfs_reserve_extent(struct btrfs_trans_handle *trans, |
1827 | struct btrfs_root *root, | 1935 | struct btrfs_root *root, |
1828 | u64 num_bytes, u64 min_alloc_size, | 1936 | u64 num_bytes, u64 min_alloc_size, |
@@ -1830,18 +1938,18 @@ int btrfs_reserve_extent(struct btrfs_trans_handle *trans, | |||
1830 | u64 search_end, struct btrfs_key *ins, | 1938 | u64 search_end, struct btrfs_key *ins, |
1831 | u64 data); | 1939 | u64 data); |
1832 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 1940 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
1833 | struct extent_buffer *orig_buf, struct extent_buffer *buf, | 1941 | struct extent_buffer *buf, int full_backref); |
1834 | u32 *nr_extents); | 1942 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
1835 | int btrfs_cache_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 1943 | struct extent_buffer *buf, int full_backref); |
1836 | struct extent_buffer *buf, u32 nr_extents); | 1944 | int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, |
1837 | int btrfs_update_ref(struct btrfs_trans_handle *trans, | 1945 | struct btrfs_root *root, |
1838 | struct btrfs_root *root, struct extent_buffer *orig_buf, | 1946 | u64 bytenr, u64 num_bytes, u64 flags, |
1839 | struct extent_buffer *buf, int start_slot, int nr); | 1947 | int is_data); |
1840 | int btrfs_free_extent(struct btrfs_trans_handle *trans, | 1948 | int btrfs_free_extent(struct btrfs_trans_handle *trans, |
1841 | struct btrfs_root *root, | 1949 | struct btrfs_root *root, |
1842 | u64 bytenr, u64 num_bytes, u64 parent, | 1950 | u64 bytenr, u64 num_bytes, u64 parent, |
1843 | u64 root_objectid, u64 ref_generation, | 1951 | u64 root_objectid, u64 owner, u64 offset); |
1844 | u64 owner_objectid, int pin); | 1952 | |
1845 | int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); | 1953 | int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); |
1846 | int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, | 1954 | int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, |
1847 | struct btrfs_root *root, | 1955 | struct btrfs_root *root, |
@@ -1849,13 +1957,8 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, | |||
1849 | int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, | 1957 | int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, |
1850 | struct btrfs_root *root, | 1958 | struct btrfs_root *root, |
1851 | u64 bytenr, u64 num_bytes, u64 parent, | 1959 | u64 bytenr, u64 num_bytes, u64 parent, |
1852 | u64 root_objectid, u64 ref_generation, | 1960 | u64 root_objectid, u64 owner, u64 offset); |
1853 | u64 owner_objectid); | 1961 | |
1854 | int btrfs_update_extent_ref(struct btrfs_trans_handle *trans, | ||
1855 | struct btrfs_root *root, u64 bytenr, u64 num_bytes, | ||
1856 | u64 orig_parent, u64 parent, | ||
1857 | u64 root_objectid, u64 ref_generation, | ||
1858 | u64 owner_objectid); | ||
1859 | int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, | 1962 | int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, |
1860 | struct btrfs_root *root); | 1963 | struct btrfs_root *root); |
1861 | int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr); | 1964 | int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr); |
@@ -1867,16 +1970,9 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans, | |||
1867 | u64 size); | 1970 | u64 size); |
1868 | int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | 1971 | int btrfs_remove_block_group(struct btrfs_trans_handle *trans, |
1869 | struct btrfs_root *root, u64 group_start); | 1972 | struct btrfs_root *root, u64 group_start); |
1870 | int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start); | 1973 | int btrfs_prepare_block_group_relocation(struct btrfs_root *root, |
1871 | int btrfs_free_reloc_root(struct btrfs_trans_handle *trans, | 1974 | struct btrfs_block_group_cache *group); |
1872 | struct btrfs_root *root); | 1975 | |
1873 | int btrfs_drop_dead_reloc_roots(struct btrfs_root *root); | ||
1874 | int btrfs_reloc_tree_cache_ref(struct btrfs_trans_handle *trans, | ||
1875 | struct btrfs_root *root, | ||
1876 | struct extent_buffer *buf, u64 orig_start); | ||
1877 | int btrfs_add_dead_reloc_root(struct btrfs_root *root); | ||
1878 | int btrfs_cleanup_reloc_trees(struct btrfs_root *root); | ||
1879 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); | ||
1880 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); | 1976 | u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags); |
1881 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); | 1977 | void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde); |
1882 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); | 1978 | void btrfs_clear_space_info_full(struct btrfs_fs_info *info); |
@@ -1891,13 +1987,12 @@ void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode, | |||
1891 | void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, | 1987 | void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode, |
1892 | u64 bytes); | 1988 | u64 bytes); |
1893 | /* ctree.c */ | 1989 | /* ctree.c */ |
1990 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, | ||
1991 | int level, int *slot); | ||
1992 | int btrfs_comp_cpu_keys(struct btrfs_key *k1, struct btrfs_key *k2); | ||
1894 | int btrfs_previous_item(struct btrfs_root *root, | 1993 | int btrfs_previous_item(struct btrfs_root *root, |
1895 | struct btrfs_path *path, u64 min_objectid, | 1994 | struct btrfs_path *path, u64 min_objectid, |
1896 | int type); | 1995 | int type); |
1897 | int btrfs_merge_path(struct btrfs_trans_handle *trans, | ||
1898 | struct btrfs_root *root, | ||
1899 | struct btrfs_key *node_keys, | ||
1900 | u64 *nodes, int lowest_level); | ||
1901 | int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, | 1996 | int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, |
1902 | struct btrfs_root *root, struct btrfs_path *path, | 1997 | struct btrfs_root *root, struct btrfs_path *path, |
1903 | struct btrfs_key *new_key); | 1998 | struct btrfs_key *new_key); |
@@ -1918,6 +2013,8 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, | |||
1918 | struct btrfs_root *root, | 2013 | struct btrfs_root *root, |
1919 | struct extent_buffer *buf, | 2014 | struct extent_buffer *buf, |
1920 | struct extent_buffer **cow_ret, u64 new_root_objectid); | 2015 | struct extent_buffer **cow_ret, u64 new_root_objectid); |
2016 | int btrfs_block_can_be_shared(struct btrfs_root *root, | ||
2017 | struct extent_buffer *buf); | ||
1921 | int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root | 2018 | int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root |
1922 | *root, struct btrfs_path *path, u32 data_size); | 2019 | *root, struct btrfs_path *path, u32 data_size); |
1923 | int btrfs_truncate_item(struct btrfs_trans_handle *trans, | 2020 | int btrfs_truncate_item(struct btrfs_trans_handle *trans, |
@@ -1944,9 +2041,6 @@ void btrfs_unlock_up_safe(struct btrfs_path *p, int level); | |||
1944 | 2041 | ||
1945 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 2042 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
1946 | struct btrfs_path *path, int slot, int nr); | 2043 | struct btrfs_path *path, int slot, int nr); |
1947 | int btrfs_del_leaf(struct btrfs_trans_handle *trans, | ||
1948 | struct btrfs_root *root, | ||
1949 | struct btrfs_path *path, u64 bytenr); | ||
1950 | static inline int btrfs_del_item(struct btrfs_trans_handle *trans, | 2044 | static inline int btrfs_del_item(struct btrfs_trans_handle *trans, |
1951 | struct btrfs_root *root, | 2045 | struct btrfs_root *root, |
1952 | struct btrfs_path *path) | 2046 | struct btrfs_path *path) |
@@ -2005,8 +2099,9 @@ int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct | |||
2005 | btrfs_root_item *item, struct btrfs_key *key); | 2099 | btrfs_root_item *item, struct btrfs_key *key); |
2006 | int btrfs_search_root(struct btrfs_root *root, u64 search_start, | 2100 | int btrfs_search_root(struct btrfs_root *root, u64 search_start, |
2007 | u64 *found_objectid); | 2101 | u64 *found_objectid); |
2008 | int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid, | 2102 | int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid); |
2009 | struct btrfs_root *latest_root); | 2103 | int btrfs_set_root_node(struct btrfs_root_item *item, |
2104 | struct extent_buffer *node); | ||
2010 | /* dir-item.c */ | 2105 | /* dir-item.c */ |
2011 | int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, | 2106 | int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, |
2012 | struct btrfs_root *root, const char *name, | 2107 | struct btrfs_root *root, const char *name, |
@@ -2139,7 +2234,6 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | |||
2139 | int btrfs_readpage(struct file *file, struct page *page); | 2234 | int btrfs_readpage(struct file *file, struct page *page); |
2140 | void btrfs_delete_inode(struct inode *inode); | 2235 | void btrfs_delete_inode(struct inode *inode); |
2141 | void btrfs_put_inode(struct inode *inode); | 2236 | void btrfs_put_inode(struct inode *inode); |
2142 | void btrfs_read_locked_inode(struct inode *inode); | ||
2143 | int btrfs_write_inode(struct inode *inode, int wait); | 2237 | int btrfs_write_inode(struct inode *inode, int wait); |
2144 | void btrfs_dirty_inode(struct inode *inode); | 2238 | void btrfs_dirty_inode(struct inode *inode); |
2145 | struct inode *btrfs_alloc_inode(struct super_block *sb); | 2239 | struct inode *btrfs_alloc_inode(struct super_block *sb); |
@@ -2147,12 +2241,8 @@ void btrfs_destroy_inode(struct inode *inode); | |||
2147 | int btrfs_init_cachep(void); | 2241 | int btrfs_init_cachep(void); |
2148 | void btrfs_destroy_cachep(void); | 2242 | void btrfs_destroy_cachep(void); |
2149 | long btrfs_ioctl_trans_end(struct file *file); | 2243 | long btrfs_ioctl_trans_end(struct file *file); |
2150 | struct inode *btrfs_ilookup(struct super_block *s, u64 objectid, | ||
2151 | struct btrfs_root *root, int wait); | ||
2152 | struct inode *btrfs_iget_locked(struct super_block *s, u64 objectid, | ||
2153 | struct btrfs_root *root); | ||
2154 | struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | 2244 | struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, |
2155 | struct btrfs_root *root, int *is_new); | 2245 | struct btrfs_root *root); |
2156 | int btrfs_commit_write(struct file *file, struct page *page, | 2246 | int btrfs_commit_write(struct file *file, struct page *page, |
2157 | unsigned from, unsigned to); | 2247 | unsigned from, unsigned to); |
2158 | struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, | 2248 | struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, |
@@ -2209,4 +2299,12 @@ int btrfs_check_acl(struct inode *inode, int mask); | |||
2209 | int btrfs_init_acl(struct inode *inode, struct inode *dir); | 2299 | int btrfs_init_acl(struct inode *inode, struct inode *dir); |
2210 | int btrfs_acl_chmod(struct inode *inode); | 2300 | int btrfs_acl_chmod(struct inode *inode); |
2211 | 2301 | ||
2302 | /* relocation.c */ | ||
2303 | int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start); | ||
2304 | int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, | ||
2305 | struct btrfs_root *root); | ||
2306 | int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, | ||
2307 | struct btrfs_root *root); | ||
2308 | int btrfs_recover_relocation(struct btrfs_root *root); | ||
2309 | int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len); | ||
2212 | #endif | 2310 | #endif |