diff options
author | Josef Bacik <josef@toxicpanda.com> | 2019-06-19 13:47:17 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2019-07-02 06:30:53 -0400 |
commit | d12ffdd1aa4c165774748265c67af3aa1edab1a0 (patch) | |
tree | 8d8f86bd04633c2d42033b71bf74c466fb51ca00 | |
parent | 9b4851bc48b9346a957a71ca355ecdb7f2759fb8 (diff) |
btrfs: move btrfs_block_rsv definitions into it's own header
Prep work for separating out all of the block_rsv related code into its
own file.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | fs/btrfs/block-rsv.h | 77 | ||||
-rw-r--r-- | fs/btrfs/ctree.h | 69 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 1 |
3 files changed, 79 insertions, 68 deletions
diff --git a/fs/btrfs/block-rsv.h b/fs/btrfs/block-rsv.h new file mode 100644 index 000000000000..359e73d329e7 --- /dev/null +++ b/fs/btrfs/block-rsv.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
2 | |||
3 | #ifndef BTRFS_BLOCK_RSV_H | ||
4 | #define BTRFS_BLOCK_RSV_H | ||
5 | |||
6 | enum btrfs_reserve_flush_enum; | ||
7 | |||
8 | /* | ||
9 | * Types of block reserves | ||
10 | */ | ||
11 | enum { | ||
12 | BTRFS_BLOCK_RSV_GLOBAL, | ||
13 | BTRFS_BLOCK_RSV_DELALLOC, | ||
14 | BTRFS_BLOCK_RSV_TRANS, | ||
15 | BTRFS_BLOCK_RSV_CHUNK, | ||
16 | BTRFS_BLOCK_RSV_DELOPS, | ||
17 | BTRFS_BLOCK_RSV_DELREFS, | ||
18 | BTRFS_BLOCK_RSV_EMPTY, | ||
19 | BTRFS_BLOCK_RSV_TEMP, | ||
20 | }; | ||
21 | |||
22 | struct btrfs_block_rsv { | ||
23 | u64 size; | ||
24 | u64 reserved; | ||
25 | struct btrfs_space_info *space_info; | ||
26 | spinlock_t lock; | ||
27 | unsigned short full; | ||
28 | unsigned short type; | ||
29 | unsigned short failfast; | ||
30 | |||
31 | /* | ||
32 | * Qgroup equivalent for @size @reserved | ||
33 | * | ||
34 | * Unlike normal @size/@reserved for inode rsv, qgroup doesn't care | ||
35 | * about things like csum size nor how many tree blocks it will need to | ||
36 | * reserve. | ||
37 | * | ||
38 | * Qgroup cares more about net change of the extent usage. | ||
39 | * | ||
40 | * So for one newly inserted file extent, in worst case it will cause | ||
41 | * leaf split and level increase, nodesize for each file extent is | ||
42 | * already too much. | ||
43 | * | ||
44 | * In short, qgroup_size/reserved is the upper limit of possible needed | ||
45 | * qgroup metadata reservation. | ||
46 | */ | ||
47 | u64 qgroup_rsv_size; | ||
48 | u64 qgroup_rsv_reserved; | ||
49 | }; | ||
50 | |||
51 | void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type); | ||
52 | struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info, | ||
53 | unsigned short type); | ||
54 | void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info, | ||
55 | struct btrfs_block_rsv *rsv, | ||
56 | unsigned short type); | ||
57 | void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info, | ||
58 | struct btrfs_block_rsv *rsv); | ||
59 | int btrfs_block_rsv_add(struct btrfs_root *root, | ||
60 | struct btrfs_block_rsv *block_rsv, u64 num_bytes, | ||
61 | enum btrfs_reserve_flush_enum flush); | ||
62 | int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor); | ||
63 | int btrfs_block_rsv_refill(struct btrfs_root *root, | ||
64 | struct btrfs_block_rsv *block_rsv, u64 min_reserved, | ||
65 | enum btrfs_reserve_flush_enum flush); | ||
66 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | ||
67 | struct btrfs_block_rsv *dst_rsv, u64 num_bytes, | ||
68 | bool update_size); | ||
69 | int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes); | ||
70 | int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, | ||
71 | struct btrfs_block_rsv *dest, u64 num_bytes, | ||
72 | int min_factor); | ||
73 | void btrfs_block_rsv_release(struct btrfs_fs_info *fs_info, | ||
74 | struct btrfs_block_rsv *block_rsv, | ||
75 | u64 num_bytes); | ||
76 | |||
77 | #endif /* BTRFS_BLOCK_RSV_H */ | ||
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, |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index c887f3352341..3f2ccfed3b0e 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "qgroup.h" | 29 | #include "qgroup.h" |
30 | #include "ref-verify.h" | 30 | #include "ref-verify.h" |
31 | #include "space-info.h" | 31 | #include "space-info.h" |
32 | #include "block-rsv.h" | ||
32 | 33 | ||
33 | #undef SCRAMBLE_DELAYED_REFS | 34 | #undef SCRAMBLE_DELAYED_REFS |
34 | 35 | ||