aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r--fs/btrfs/ctree.h69
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
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,