aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosef Bacik <josef@toxicpanda.com>2019-06-19 13:47:17 -0400
committerDavid Sterba <dsterba@suse.com>2019-07-02 06:30:53 -0400
commitd12ffdd1aa4c165774748265c67af3aa1edab1a0 (patch)
tree8d8f86bd04633c2d42033b71bf74c466fb51ca00
parent9b4851bc48b9346a957a71ca355ecdb7f2759fb8 (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.h77
-rw-r--r--fs/btrfs/ctree.h69
-rw-r--r--fs/btrfs/extent-tree.c1
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
6enum btrfs_reserve_flush_enum;
7
8/*
9 * Types of block reserves
10 */
11enum {
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
22struct 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
51void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
52struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
53 unsigned short type);
54void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
55 struct btrfs_block_rsv *rsv,
56 unsigned short type);
57void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
58 struct btrfs_block_rsv *rsv);
59int 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);
62int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor);
63int 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);
66int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
67 struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
68 bool update_size);
69int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes);
70int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
71 struct btrfs_block_rsv *dest, u64 num_bytes,
72 int min_factor);
73void 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
36struct btrfs_trans_handle; 37struct btrfs_trans_handle;
37struct btrfs_transaction; 38struct btrfs_transaction;
@@ -404,49 +405,6 @@ struct raid_kobject {
404}; 405};
405 406
406/* 407/*
407 * Types of block reserves
408 */
409enum {
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
420struct 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);
2827int btrfs_delalloc_reserve_space(struct inode *inode, 2785int 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);
2829void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
2830struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
2831 unsigned short type);
2832void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
2833 struct btrfs_block_rsv *rsv,
2834 unsigned short type);
2835void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
2836 struct btrfs_block_rsv *rsv);
2837int 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);
2840int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor);
2841int 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);
2844int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
2845 struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
2846 bool update_size);
2847int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes);
2848int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
2849 struct btrfs_block_rsv *dest, u64 num_bytes,
2850 int min_factor);
2851void btrfs_block_rsv_release(struct btrfs_fs_info *fs_info,
2852 struct btrfs_block_rsv *block_rsv,
2853 u64 num_bytes);
2854void btrfs_delayed_refs_rsv_release(struct btrfs_fs_info *fs_info, int nr); 2787void btrfs_delayed_refs_rsv_release(struct btrfs_fs_info *fs_info, int nr);
2855void btrfs_update_delayed_refs_rsv(struct btrfs_trans_handle *trans); 2788void btrfs_update_delayed_refs_rsv(struct btrfs_trans_handle *trans);
2856int btrfs_delayed_refs_rsv_refill(struct btrfs_fs_info *fs_info, 2789int 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