Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
btrfs
free-space-cache.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2009 Oracle. All rights reserved.
3
*
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public
6
* License v2 as published by the Free Software Foundation.
7
*
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* General Public License for more details.
12
*
13
* You should have received a copy of the GNU General Public
14
* License along with this program; if not, write to the
15
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16
* Boston, MA 021110-1307, USA.
17
*/
18
19
#ifndef __BTRFS_FREE_SPACE_CACHE
20
#define __BTRFS_FREE_SPACE_CACHE
21
22
struct
btrfs_free_space
{
23
struct
rb_node
offset_index
;
24
u64
offset
;
25
u64
bytes
;
26
unsigned
long
*
bitmap
;
27
struct
list_head
list
;
28
};
29
30
struct
btrfs_free_space_ctl
{
31
spinlock_t
tree_lock
;
32
struct
rb_root
free_space_offset
;
33
u64
free_space
;
34
int
extents_thresh
;
35
int
free_extents
;
36
int
total_bitmaps
;
37
int
unit
;
38
u64
start
;
39
struct
btrfs_free_space_op
*
op
;
40
void
*
private
;
41
};
42
43
struct
btrfs_free_space_op
{
44
void
(*
recalc_thresholds
)(
struct
btrfs_free_space_ctl
*
ctl
);
45
bool
(*
use_bitmap
)(
struct
btrfs_free_space_ctl
*
ctl
,
46
struct
btrfs_free_space
*
info
);
47
};
48
49
struct
inode
*
lookup_free_space_inode
(
struct
btrfs_root
*root,
50
struct
btrfs_block_group_cache
51
*
block_group
,
struct
btrfs_path
*
path
);
52
int
create_free_space_inode
(
struct
btrfs_root
*root,
53
struct
btrfs_trans_handle
*
trans
,
54
struct
btrfs_block_group_cache
*
block_group
,
55
struct
btrfs_path
*
path
);
56
57
int
btrfs_truncate_free_space_cache
(
struct
btrfs_root
*root,
58
struct
btrfs_trans_handle
*
trans
,
59
struct
btrfs_path
*
path
,
60
struct
inode
*
inode
);
61
int
load_free_space_cache
(
struct
btrfs_fs_info
*
fs_info
,
62
struct
btrfs_block_group_cache
*
block_group
);
63
int
btrfs_write_out_cache
(
struct
btrfs_root
*root,
64
struct
btrfs_trans_handle
*
trans
,
65
struct
btrfs_block_group_cache
*
block_group
,
66
struct
btrfs_path
*
path
);
67
68
struct
inode
*
lookup_free_ino_inode
(
struct
btrfs_root
*root,
69
struct
btrfs_path
*
path
);
70
int
create_free_ino_inode
(
struct
btrfs_root
*root,
71
struct
btrfs_trans_handle
*
trans
,
72
struct
btrfs_path
*
path
);
73
int
load_free_ino_cache
(
struct
btrfs_fs_info
*
fs_info
,
74
struct
btrfs_root
*root);
75
int
btrfs_write_out_ino_cache
(
struct
btrfs_root
*root,
76
struct
btrfs_trans_handle
*
trans
,
77
struct
btrfs_path
*
path
);
78
79
void
btrfs_init_free_space_ctl
(
struct
btrfs_block_group_cache
*
block_group
);
80
int
__btrfs_add_free_space
(
struct
btrfs_free_space_ctl
*
ctl
,
81
u64
bytenr
,
u64
size
);
82
static
inline
int
83
btrfs_add_free_space(
struct
btrfs_block_group_cache
*
block_group
,
84
u64
bytenr
,
u64
size
)
85
{
86
return
__btrfs_add_free_space
(block_group->
free_space_ctl
,
87
bytenr, size);
88
}
89
int
btrfs_remove_free_space
(
struct
btrfs_block_group_cache
*
block_group
,
90
u64
bytenr
,
u64
size
);
91
void
__btrfs_remove_free_space_cache
(
struct
btrfs_free_space_ctl
*
ctl
);
92
void
btrfs_remove_free_space_cache
(
struct
btrfs_block_group_cache
93
*
block_group
);
94
u64
btrfs_find_space_for_alloc
(
struct
btrfs_block_group_cache
*
block_group
,
95
u64
offset
,
u64
bytes
,
u64
empty_size);
96
u64
btrfs_find_ino_for_alloc
(
struct
btrfs_root
*
fs_root
);
97
void
btrfs_dump_free_space
(
struct
btrfs_block_group_cache
*
block_group
,
98
u64
bytes
);
99
int
btrfs_find_space_cluster
(
struct
btrfs_trans_handle
*
trans
,
100
struct
btrfs_root
*root,
101
struct
btrfs_block_group_cache
*
block_group
,
102
struct
btrfs_free_cluster
*
cluster
,
103
u64
offset
,
u64
bytes
,
u64
empty_size);
104
void
btrfs_init_free_cluster
(
struct
btrfs_free_cluster
*
cluster
);
105
u64
btrfs_alloc_from_cluster
(
struct
btrfs_block_group_cache
*
block_group
,
106
struct
btrfs_free_cluster
*
cluster
,
u64
bytes
,
107
u64
min_start);
108
int
btrfs_return_cluster_to_free_space
(
109
struct
btrfs_block_group_cache
*
block_group
,
110
struct
btrfs_free_cluster
*
cluster
);
111
int
btrfs_trim_block_group
(
struct
btrfs_block_group_cache
*
block_group
,
112
u64
*trimmed,
u64
start
,
u64
end
,
u64
minlen);
113
#endif
Generated on Thu Jan 10 2013 14:45:33 for Linux Kernel by
1.8.2