diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 169 |
1 files changed, 116 insertions, 53 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 80b6486fd5e6..5b8ef8eb3521 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -48,6 +48,8 @@ struct btrfs_ordered_sum; | |||
48 | 48 | ||
49 | #define BTRFS_MAGIC "_BHRfS_M" | 49 | #define BTRFS_MAGIC "_BHRfS_M" |
50 | 50 | ||
51 | #define BTRFS_MAX_MIRRORS 2 | ||
52 | |||
51 | #define BTRFS_MAX_LEVEL 8 | 53 | #define BTRFS_MAX_LEVEL 8 |
52 | 54 | ||
53 | #define BTRFS_COMPAT_EXTENT_TREE_V0 | 55 | #define BTRFS_COMPAT_EXTENT_TREE_V0 |
@@ -138,6 +140,12 @@ struct btrfs_ordered_sum; | |||
138 | #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 | 140 | #define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2 |
139 | 141 | ||
140 | /* | 142 | /* |
143 | * the max metadata block size. This limit is somewhat artificial, | ||
144 | * but the memmove costs go through the roof for larger blocks. | ||
145 | */ | ||
146 | #define BTRFS_MAX_METADATA_BLOCKSIZE 65536 | ||
147 | |||
148 | /* | ||
141 | * we can actually store much bigger names, but lets not confuse the rest | 149 | * we can actually store much bigger names, but lets not confuse the rest |
142 | * of linux | 150 | * of linux |
143 | */ | 151 | */ |
@@ -461,6 +469,19 @@ struct btrfs_super_block { | |||
461 | #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1) | 469 | #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1) |
462 | #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2) | 470 | #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2) |
463 | #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3) | 471 | #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3) |
472 | /* | ||
473 | * some patches floated around with a second compression method | ||
474 | * lets save that incompat here for when they do get in | ||
475 | * Note we don't actually support it, we're just reserving the | ||
476 | * number | ||
477 | */ | ||
478 | #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4) | ||
479 | |||
480 | /* | ||
481 | * older kernels tried to do bigger metadata blocks, but the | ||
482 | * code was pretty buggy. Lets not let them try anymore. | ||
483 | */ | ||
484 | #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5) | ||
464 | 485 | ||
465 | #define BTRFS_FEATURE_COMPAT_SUPP 0ULL | 486 | #define BTRFS_FEATURE_COMPAT_SUPP 0ULL |
466 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL | 487 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL |
@@ -468,6 +489,7 @@ struct btrfs_super_block { | |||
468 | (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \ | 489 | (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \ |
469 | BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \ | 490 | BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \ |
470 | BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \ | 491 | BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \ |
492 | BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \ | ||
471 | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) | 493 | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO) |
472 | 494 | ||
473 | /* | 495 | /* |
@@ -829,6 +851,21 @@ struct btrfs_csum_item { | |||
829 | */ | 851 | */ |
830 | #define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48) | 852 | #define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48) |
831 | 853 | ||
854 | #define BTRFS_EXTENDED_PROFILE_MASK (BTRFS_BLOCK_GROUP_PROFILE_MASK | \ | ||
855 | BTRFS_AVAIL_ALLOC_BIT_SINGLE) | ||
856 | |||
857 | static inline u64 chunk_to_extended(u64 flags) | ||
858 | { | ||
859 | if ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0) | ||
860 | flags |= BTRFS_AVAIL_ALLOC_BIT_SINGLE; | ||
861 | |||
862 | return flags; | ||
863 | } | ||
864 | static inline u64 extended_to_chunk(u64 flags) | ||
865 | { | ||
866 | return flags & ~BTRFS_AVAIL_ALLOC_BIT_SINGLE; | ||
867 | } | ||
868 | |||
832 | struct btrfs_block_group_item { | 869 | struct btrfs_block_group_item { |
833 | __le64 used; | 870 | __le64 used; |
834 | __le64 chunk_objectid; | 871 | __le64 chunk_objectid; |
@@ -1503,6 +1540,7 @@ struct btrfs_ioctl_defrag_range_args { | |||
1503 | #define BTRFS_MOUNT_SKIP_BALANCE (1 << 19) | 1540 | #define BTRFS_MOUNT_SKIP_BALANCE (1 << 19) |
1504 | #define BTRFS_MOUNT_CHECK_INTEGRITY (1 << 20) | 1541 | #define BTRFS_MOUNT_CHECK_INTEGRITY (1 << 20) |
1505 | #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21) | 1542 | #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21) |
1543 | #define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22) | ||
1506 | 1544 | ||
1507 | #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) | 1545 | #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) |
1508 | #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) | 1546 | #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) |
@@ -1526,6 +1564,17 @@ struct btrfs_ioctl_defrag_range_args { | |||
1526 | 1564 | ||
1527 | #define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31) | 1565 | #define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31) |
1528 | 1566 | ||
1567 | struct btrfs_map_token { | ||
1568 | struct extent_buffer *eb; | ||
1569 | char *kaddr; | ||
1570 | unsigned long offset; | ||
1571 | }; | ||
1572 | |||
1573 | static inline void btrfs_init_map_token (struct btrfs_map_token *token) | ||
1574 | { | ||
1575 | memset(token, 0, sizeof(*token)); | ||
1576 | } | ||
1577 | |||
1529 | /* some macros to generate set/get funcs for the struct fields. This | 1578 | /* some macros to generate set/get funcs for the struct fields. This |
1530 | * assumes there is a lefoo_to_cpu for every type, so lets make a simple | 1579 | * assumes there is a lefoo_to_cpu for every type, so lets make a simple |
1531 | * one for u8: | 1580 | * one for u8: |
@@ -1549,20 +1598,22 @@ struct btrfs_ioctl_defrag_range_args { | |||
1549 | #ifndef BTRFS_SETGET_FUNCS | 1598 | #ifndef BTRFS_SETGET_FUNCS |
1550 | #define BTRFS_SETGET_FUNCS(name, type, member, bits) \ | 1599 | #define BTRFS_SETGET_FUNCS(name, type, member, bits) \ |
1551 | u##bits btrfs_##name(struct extent_buffer *eb, type *s); \ | 1600 | u##bits btrfs_##name(struct extent_buffer *eb, type *s); \ |
1601 | u##bits btrfs_token_##name(struct extent_buffer *eb, type *s, struct btrfs_map_token *token); \ | ||
1602 | void btrfs_set_token_##name(struct extent_buffer *eb, type *s, u##bits val, struct btrfs_map_token *token);\ | ||
1552 | void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val); | 1603 | void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val); |
1553 | #endif | 1604 | #endif |
1554 | 1605 | ||
1555 | #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits) \ | 1606 | #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits) \ |
1556 | static inline u##bits btrfs_##name(struct extent_buffer *eb) \ | 1607 | static inline u##bits btrfs_##name(struct extent_buffer *eb) \ |
1557 | { \ | 1608 | { \ |
1558 | type *p = page_address(eb->first_page); \ | 1609 | type *p = page_address(eb->pages[0]); \ |
1559 | u##bits res = le##bits##_to_cpu(p->member); \ | 1610 | u##bits res = le##bits##_to_cpu(p->member); \ |
1560 | return res; \ | 1611 | return res; \ |
1561 | } \ | 1612 | } \ |
1562 | static inline void btrfs_set_##name(struct extent_buffer *eb, \ | 1613 | static inline void btrfs_set_##name(struct extent_buffer *eb, \ |
1563 | u##bits val) \ | 1614 | u##bits val) \ |
1564 | { \ | 1615 | { \ |
1565 | type *p = page_address(eb->first_page); \ | 1616 | type *p = page_address(eb->pages[0]); \ |
1566 | p->member = cpu_to_le##bits(val); \ | 1617 | p->member = cpu_to_le##bits(val); \ |
1567 | } | 1618 | } |
1568 | 1619 | ||
@@ -2466,8 +2517,7 @@ int btrfs_reserve_extent(struct btrfs_trans_handle *trans, | |||
2466 | struct btrfs_root *root, | 2517 | struct btrfs_root *root, |
2467 | u64 num_bytes, u64 min_alloc_size, | 2518 | u64 num_bytes, u64 min_alloc_size, |
2468 | u64 empty_size, u64 hint_byte, | 2519 | u64 empty_size, u64 hint_byte, |
2469 | u64 search_end, struct btrfs_key *ins, | 2520 | struct btrfs_key *ins, u64 data); |
2470 | u64 data); | ||
2471 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 2521 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
2472 | struct extent_buffer *buf, int full_backref, int for_cow); | 2522 | struct extent_buffer *buf, int full_backref, int for_cow); |
2473 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 2523 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
@@ -2484,8 +2534,8 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, | |||
2484 | int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); | 2534 | int btrfs_free_reserved_extent(struct btrfs_root *root, u64 start, u64 len); |
2485 | int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root, | 2535 | int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root, |
2486 | u64 start, u64 len); | 2536 | u64 start, u64 len); |
2487 | int btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans, | 2537 | void btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans, |
2488 | struct btrfs_root *root); | 2538 | struct btrfs_root *root); |
2489 | int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, | 2539 | int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, |
2490 | struct btrfs_root *root); | 2540 | struct btrfs_root *root); |
2491 | int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, | 2541 | int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, |
@@ -2548,8 +2598,8 @@ void btrfs_block_rsv_release(struct btrfs_root *root, | |||
2548 | u64 num_bytes); | 2598 | u64 num_bytes); |
2549 | int btrfs_set_block_group_ro(struct btrfs_root *root, | 2599 | int btrfs_set_block_group_ro(struct btrfs_root *root, |
2550 | struct btrfs_block_group_cache *cache); | 2600 | struct btrfs_block_group_cache *cache); |
2551 | int btrfs_set_block_group_rw(struct btrfs_root *root, | 2601 | void btrfs_set_block_group_rw(struct btrfs_root *root, |
2552 | struct btrfs_block_group_cache *cache); | 2602 | struct btrfs_block_group_cache *cache); |
2553 | void btrfs_put_block_group_cache(struct btrfs_fs_info *info); | 2603 | void btrfs_put_block_group_cache(struct btrfs_fs_info *info); |
2554 | u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo); | 2604 | u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo); |
2555 | int btrfs_error_unpin_extent_range(struct btrfs_root *root, | 2605 | int btrfs_error_unpin_extent_range(struct btrfs_root *root, |
@@ -2568,9 +2618,9 @@ int btrfs_comp_cpu_keys(struct btrfs_key *k1, struct btrfs_key *k2); | |||
2568 | int btrfs_previous_item(struct btrfs_root *root, | 2618 | int btrfs_previous_item(struct btrfs_root *root, |
2569 | struct btrfs_path *path, u64 min_objectid, | 2619 | struct btrfs_path *path, u64 min_objectid, |
2570 | int type); | 2620 | int type); |
2571 | int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, | 2621 | void btrfs_set_item_key_safe(struct btrfs_trans_handle *trans, |
2572 | struct btrfs_root *root, struct btrfs_path *path, | 2622 | struct btrfs_root *root, struct btrfs_path *path, |
2573 | struct btrfs_key *new_key); | 2623 | struct btrfs_key *new_key); |
2574 | struct extent_buffer *btrfs_root_node(struct btrfs_root *root); | 2624 | struct extent_buffer *btrfs_root_node(struct btrfs_root *root); |
2575 | struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); | 2625 | struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); |
2576 | int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, | 2626 | int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, |
@@ -2590,12 +2640,13 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, | |||
2590 | struct extent_buffer **cow_ret, u64 new_root_objectid); | 2640 | struct extent_buffer **cow_ret, u64 new_root_objectid); |
2591 | int btrfs_block_can_be_shared(struct btrfs_root *root, | 2641 | int btrfs_block_can_be_shared(struct btrfs_root *root, |
2592 | struct extent_buffer *buf); | 2642 | struct extent_buffer *buf); |
2593 | int btrfs_extend_item(struct btrfs_trans_handle *trans, struct btrfs_root | 2643 | void btrfs_extend_item(struct btrfs_trans_handle *trans, |
2594 | *root, struct btrfs_path *path, u32 data_size); | 2644 | struct btrfs_root *root, struct btrfs_path *path, |
2595 | int btrfs_truncate_item(struct btrfs_trans_handle *trans, | 2645 | u32 data_size); |
2596 | struct btrfs_root *root, | 2646 | void btrfs_truncate_item(struct btrfs_trans_handle *trans, |
2597 | struct btrfs_path *path, | 2647 | struct btrfs_root *root, |
2598 | u32 new_size, int from_end); | 2648 | struct btrfs_path *path, |
2649 | u32 new_size, int from_end); | ||
2599 | int btrfs_split_item(struct btrfs_trans_handle *trans, | 2650 | int btrfs_split_item(struct btrfs_trans_handle *trans, |
2600 | struct btrfs_root *root, | 2651 | struct btrfs_root *root, |
2601 | struct btrfs_path *path, | 2652 | struct btrfs_path *path, |
@@ -2629,10 +2680,10 @@ static inline int btrfs_del_item(struct btrfs_trans_handle *trans, | |||
2629 | return btrfs_del_items(trans, root, path, path->slots[0], 1); | 2680 | return btrfs_del_items(trans, root, path, path->slots[0], 1); |
2630 | } | 2681 | } |
2631 | 2682 | ||
2632 | int setup_items_for_insert(struct btrfs_trans_handle *trans, | 2683 | void setup_items_for_insert(struct btrfs_trans_handle *trans, |
2633 | struct btrfs_root *root, struct btrfs_path *path, | 2684 | struct btrfs_root *root, struct btrfs_path *path, |
2634 | struct btrfs_key *cpu_key, u32 *data_size, | 2685 | struct btrfs_key *cpu_key, u32 *data_size, |
2635 | u32 total_data, u32 total_size, int nr); | 2686 | u32 total_data, u32 total_size, int nr); |
2636 | int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root | 2687 | int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root |
2637 | *root, struct btrfs_key *key, void *data, u32 data_size); | 2688 | *root, struct btrfs_key *key, void *data, u32 data_size); |
2638 | int btrfs_insert_empty_items(struct btrfs_trans_handle *trans, | 2689 | int btrfs_insert_empty_items(struct btrfs_trans_handle *trans, |
@@ -2659,9 +2710,9 @@ static inline int btrfs_next_item(struct btrfs_root *root, struct btrfs_path *p) | |||
2659 | } | 2710 | } |
2660 | int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); | 2711 | int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path); |
2661 | int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); | 2712 | int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf); |
2662 | void btrfs_drop_snapshot(struct btrfs_root *root, | 2713 | int __must_check btrfs_drop_snapshot(struct btrfs_root *root, |
2663 | struct btrfs_block_rsv *block_rsv, int update_ref, | 2714 | struct btrfs_block_rsv *block_rsv, |
2664 | int for_reloc); | 2715 | int update_ref, int for_reloc); |
2665 | int btrfs_drop_subtree(struct btrfs_trans_handle *trans, | 2716 | int btrfs_drop_subtree(struct btrfs_trans_handle *trans, |
2666 | struct btrfs_root *root, | 2717 | struct btrfs_root *root, |
2667 | struct extent_buffer *node, | 2718 | struct extent_buffer *node, |
@@ -2687,24 +2738,6 @@ static inline void free_fs_info(struct btrfs_fs_info *fs_info) | |||
2687 | kfree(fs_info->super_for_commit); | 2738 | kfree(fs_info->super_for_commit); |
2688 | kfree(fs_info); | 2739 | kfree(fs_info); |
2689 | } | 2740 | } |
2690 | /** | ||
2691 | * profile_is_valid - tests whether a given profile is valid and reduced | ||
2692 | * @flags: profile to validate | ||
2693 | * @extended: if true @flags is treated as an extended profile | ||
2694 | */ | ||
2695 | static inline int profile_is_valid(u64 flags, int extended) | ||
2696 | { | ||
2697 | u64 mask = ~BTRFS_BLOCK_GROUP_PROFILE_MASK; | ||
2698 | |||
2699 | flags &= ~BTRFS_BLOCK_GROUP_TYPE_MASK; | ||
2700 | if (extended) | ||
2701 | mask &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE; | ||
2702 | |||
2703 | if (flags & mask) | ||
2704 | return 0; | ||
2705 | /* true if zero or exactly one bit set */ | ||
2706 | return (flags & (~flags + 1)) == flags; | ||
2707 | } | ||
2708 | 2741 | ||
2709 | /* root-item.c */ | 2742 | /* root-item.c */ |
2710 | int btrfs_find_root_ref(struct btrfs_root *tree_root, | 2743 | int btrfs_find_root_ref(struct btrfs_root *tree_root, |
@@ -2723,9 +2756,10 @@ int btrfs_del_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |||
2723 | int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root | 2756 | int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root |
2724 | *root, struct btrfs_key *key, struct btrfs_root_item | 2757 | *root, struct btrfs_key *key, struct btrfs_root_item |
2725 | *item); | 2758 | *item); |
2726 | int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root | 2759 | int __must_check btrfs_update_root(struct btrfs_trans_handle *trans, |
2727 | *root, struct btrfs_key *key, struct btrfs_root_item | 2760 | struct btrfs_root *root, |
2728 | *item); | 2761 | struct btrfs_key *key, |
2762 | struct btrfs_root_item *item); | ||
2729 | int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct | 2763 | int btrfs_find_last_root(struct btrfs_root *root, u64 objectid, struct |
2730 | btrfs_root_item *item, struct btrfs_key *key); | 2764 | btrfs_root_item *item, struct btrfs_key *key); |
2731 | int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid); | 2765 | int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid); |
@@ -2909,7 +2943,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root); | |||
2909 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, | 2943 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, |
2910 | struct btrfs_root *root); | 2944 | struct btrfs_root *root); |
2911 | int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size); | 2945 | int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size); |
2912 | int btrfs_invalidate_inodes(struct btrfs_root *root); | 2946 | void btrfs_invalidate_inodes(struct btrfs_root *root); |
2913 | void btrfs_add_delayed_iput(struct inode *inode); | 2947 | void btrfs_add_delayed_iput(struct inode *inode); |
2914 | void btrfs_run_delayed_iputs(struct btrfs_root *root); | 2948 | void btrfs_run_delayed_iputs(struct btrfs_root *root); |
2915 | int btrfs_prealloc_file_range(struct inode *inode, int mode, | 2949 | int btrfs_prealloc_file_range(struct inode *inode, int mode, |
@@ -2961,13 +2995,41 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size); | |||
2961 | /* super.c */ | 2995 | /* super.c */ |
2962 | int btrfs_parse_options(struct btrfs_root *root, char *options); | 2996 | int btrfs_parse_options(struct btrfs_root *root, char *options); |
2963 | int btrfs_sync_fs(struct super_block *sb, int wait); | 2997 | int btrfs_sync_fs(struct super_block *sb, int wait); |
2998 | void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...); | ||
2964 | void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, | 2999 | void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function, |
2965 | unsigned int line, int errno); | 3000 | unsigned int line, int errno, const char *fmt, ...); |
3001 | |||
3002 | void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, | ||
3003 | struct btrfs_root *root, const char *function, | ||
3004 | unsigned int line, int errno); | ||
3005 | |||
3006 | #define btrfs_abort_transaction(trans, root, errno) \ | ||
3007 | do { \ | ||
3008 | __btrfs_abort_transaction(trans, root, __func__, \ | ||
3009 | __LINE__, errno); \ | ||
3010 | } while (0) | ||
2966 | 3011 | ||
2967 | #define btrfs_std_error(fs_info, errno) \ | 3012 | #define btrfs_std_error(fs_info, errno) \ |
2968 | do { \ | 3013 | do { \ |
2969 | if ((errno)) \ | 3014 | if ((errno)) \ |
2970 | __btrfs_std_error((fs_info), __func__, __LINE__, (errno));\ | 3015 | __btrfs_std_error((fs_info), __func__, \ |
3016 | __LINE__, (errno), NULL); \ | ||
3017 | } while (0) | ||
3018 | |||
3019 | #define btrfs_error(fs_info, errno, fmt, args...) \ | ||
3020 | do { \ | ||
3021 | __btrfs_std_error((fs_info), __func__, __LINE__, \ | ||
3022 | (errno), fmt, ##args); \ | ||
3023 | } while (0) | ||
3024 | |||
3025 | void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function, | ||
3026 | unsigned int line, int errno, const char *fmt, ...); | ||
3027 | |||
3028 | #define btrfs_panic(fs_info, errno, fmt, args...) \ | ||
3029 | do { \ | ||
3030 | struct btrfs_fs_info *_i = (fs_info); \ | ||
3031 | __btrfs_panic(_i, __func__, __LINE__, errno, fmt, ##args); \ | ||
3032 | BUG_ON(!(_i->mount_opt & BTRFS_MOUNT_PANIC_ON_FATAL_ERROR)); \ | ||
2971 | } while (0) | 3033 | } while (0) |
2972 | 3034 | ||
2973 | /* acl.c */ | 3035 | /* acl.c */ |
@@ -3003,16 +3065,17 @@ void btrfs_reloc_cow_block(struct btrfs_trans_handle *trans, | |||
3003 | void btrfs_reloc_pre_snapshot(struct btrfs_trans_handle *trans, | 3065 | void btrfs_reloc_pre_snapshot(struct btrfs_trans_handle *trans, |
3004 | struct btrfs_pending_snapshot *pending, | 3066 | struct btrfs_pending_snapshot *pending, |
3005 | u64 *bytes_to_reserve); | 3067 | u64 *bytes_to_reserve); |
3006 | void btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, | 3068 | int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, |
3007 | struct btrfs_pending_snapshot *pending); | 3069 | struct btrfs_pending_snapshot *pending); |
3008 | 3070 | ||
3009 | /* scrub.c */ | 3071 | /* scrub.c */ |
3010 | int btrfs_scrub_dev(struct btrfs_root *root, u64 devid, u64 start, u64 end, | 3072 | int btrfs_scrub_dev(struct btrfs_root *root, u64 devid, u64 start, u64 end, |
3011 | struct btrfs_scrub_progress *progress, int readonly); | 3073 | struct btrfs_scrub_progress *progress, int readonly); |
3012 | int btrfs_scrub_pause(struct btrfs_root *root); | 3074 | void btrfs_scrub_pause(struct btrfs_root *root); |
3013 | int btrfs_scrub_pause_super(struct btrfs_root *root); | 3075 | void btrfs_scrub_pause_super(struct btrfs_root *root); |
3014 | int btrfs_scrub_continue(struct btrfs_root *root); | 3076 | void btrfs_scrub_continue(struct btrfs_root *root); |
3015 | int btrfs_scrub_continue_super(struct btrfs_root *root); | 3077 | void btrfs_scrub_continue_super(struct btrfs_root *root); |
3078 | int __btrfs_scrub_cancel(struct btrfs_fs_info *info); | ||
3016 | int btrfs_scrub_cancel(struct btrfs_root *root); | 3079 | int btrfs_scrub_cancel(struct btrfs_root *root); |
3017 | int btrfs_scrub_cancel_dev(struct btrfs_root *root, struct btrfs_device *dev); | 3080 | int btrfs_scrub_cancel_dev(struct btrfs_root *root, struct btrfs_device *dev); |
3018 | int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid); | 3081 | int btrfs_scrub_cancel_devid(struct btrfs_root *root, u64 devid); |