diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 69 |
1 files changed, 1 insertions, 68 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index b78470fdc226..adb6d2747e0c 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -32,6 +32,7 @@ | |||
32 | #include "extent_io.h" | 32 | #include "extent_io.h" |
33 | #include "extent_map.h" | 33 | #include "extent_map.h" |
34 | #include "async-thread.h" | 34 | #include "async-thread.h" |
35 | #include "block-rsv.h" | ||
35 | 36 | ||
36 | struct btrfs_trans_handle; | 37 | struct btrfs_trans_handle; |
37 | struct btrfs_transaction; | 38 | struct btrfs_transaction; |
@@ -404,49 +405,6 @@ struct raid_kobject { | |||
404 | }; | 405 | }; |
405 | 406 | ||
406 | /* | 407 | /* |
407 | * Types of block reserves | ||
408 | */ | ||
409 | enum { | ||
410 | BTRFS_BLOCK_RSV_GLOBAL, | ||
411 | BTRFS_BLOCK_RSV_DELALLOC, | ||
412 | BTRFS_BLOCK_RSV_TRANS, | ||
413 | BTRFS_BLOCK_RSV_CHUNK, | ||
414 | BTRFS_BLOCK_RSV_DELOPS, | ||
415 | BTRFS_BLOCK_RSV_DELREFS, | ||
416 | BTRFS_BLOCK_RSV_EMPTY, | ||
417 | BTRFS_BLOCK_RSV_TEMP, | ||
418 | }; | ||
419 | |||
420 | struct btrfs_block_rsv { | ||
421 | u64 size; | ||
422 | u64 reserved; | ||
423 | struct btrfs_space_info *space_info; | ||
424 | spinlock_t lock; | ||
425 | unsigned short full; | ||
426 | unsigned short type; | ||
427 | unsigned short failfast; | ||
428 | |||
429 | /* | ||
430 | * Qgroup equivalent for @size @reserved | ||
431 | * | ||
432 | * Unlike normal @size/@reserved for inode rsv, qgroup doesn't care | ||
433 | * about things like csum size nor how many tree blocks it will need to | ||
434 | * reserve. | ||
435 | * | ||
436 | * Qgroup cares more about net change of the extent usage. | ||
437 | * | ||
438 | * So for one newly inserted file extent, in worst case it will cause | ||
439 | * leaf split and level increase, nodesize for each file extent is | ||
440 | * already too much. | ||
441 | * | ||
442 | * In short, qgroup_size/reserved is the upper limit of possible needed | ||
443 | * qgroup metadata reservation. | ||
444 | */ | ||
445 | u64 qgroup_rsv_size; | ||
446 | u64 qgroup_rsv_reserved; | ||
447 | }; | ||
448 | |||
449 | /* | ||
450 | * free clusters are used to claim free space in relatively large chunks, | 408 | * free clusters are used to claim free space in relatively large chunks, |
451 | * allowing us to do less seeky writes. They are used for all metadata | 409 | * allowing us to do less seeky writes. They are used for all metadata |
452 | * allocations. In ssd_spread mode they are also used for data allocations. | 410 | * allocations. In ssd_spread mode they are also used for data allocations. |
@@ -2826,31 +2784,6 @@ void btrfs_delalloc_release_metadata(struct btrfs_inode *inode, u64 num_bytes, | |||
2826 | bool qgroup_free); | 2784 | bool qgroup_free); |
2827 | int btrfs_delalloc_reserve_space(struct inode *inode, | 2785 | int btrfs_delalloc_reserve_space(struct inode *inode, |
2828 | struct extent_changeset **reserved, u64 start, u64 len); | 2786 | struct extent_changeset **reserved, u64 start, u64 len); |
2829 | void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type); | ||
2830 | struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info, | ||
2831 | unsigned short type); | ||
2832 | void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info, | ||
2833 | struct btrfs_block_rsv *rsv, | ||
2834 | unsigned short type); | ||
2835 | void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info, | ||
2836 | struct btrfs_block_rsv *rsv); | ||
2837 | int btrfs_block_rsv_add(struct btrfs_root *root, | ||
2838 | struct btrfs_block_rsv *block_rsv, u64 num_bytes, | ||
2839 | enum btrfs_reserve_flush_enum flush); | ||
2840 | int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor); | ||
2841 | int btrfs_block_rsv_refill(struct btrfs_root *root, | ||
2842 | struct btrfs_block_rsv *block_rsv, u64 min_reserved, | ||
2843 | enum btrfs_reserve_flush_enum flush); | ||
2844 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | ||
2845 | struct btrfs_block_rsv *dst_rsv, u64 num_bytes, | ||
2846 | bool update_size); | ||
2847 | int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes); | ||
2848 | int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, | ||
2849 | struct btrfs_block_rsv *dest, u64 num_bytes, | ||
2850 | int min_factor); | ||
2851 | void btrfs_block_rsv_release(struct btrfs_fs_info *fs_info, | ||
2852 | struct btrfs_block_rsv *block_rsv, | ||
2853 | u64 num_bytes); | ||
2854 | void btrfs_delayed_refs_rsv_release(struct btrfs_fs_info *fs_info, int nr); | 2787 | void btrfs_delayed_refs_rsv_release(struct btrfs_fs_info *fs_info, int nr); |
2855 | void btrfs_update_delayed_refs_rsv(struct btrfs_trans_handle *trans); | 2788 | void btrfs_update_delayed_refs_rsv(struct btrfs_trans_handle *trans); |
2856 | int btrfs_delayed_refs_rsv_refill(struct btrfs_fs_info *fs_info, | 2789 | int btrfs_delayed_refs_rsv_refill(struct btrfs_fs_info *fs_info, |