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
include
linux
writeback.h
Go to the documentation of this file.
1
/*
2
* include/linux/writeback.h
3
*/
4
#ifndef WRITEBACK_H
5
#define WRITEBACK_H
6
7
#include <linux/sched.h>
8
#include <linux/fs.h>
9
10
DECLARE_PER_CPU
(
int
, dirty_throttle_leaks);
11
12
/*
13
* The 1/4 region under the global dirty thresh is for smooth dirty throttling:
14
*
15
* (thresh - thresh/DIRTY_FULL_SCOPE, thresh)
16
*
17
* Further beyond, all dirtier tasks will enter a loop waiting (possibly long
18
* time) for the dirty pages to drop, unless written enough pages.
19
*
20
* The global dirty threshold is normally equal to the global dirty limit,
21
* except when the system suddenly allocates a lot of anonymous memory and
22
* knocks down the global dirty threshold quickly, in which case the global
23
* dirty limit will follow down slowly to prevent livelocking all dirtier tasks.
24
*/
25
#define DIRTY_SCOPE 8
26
#define DIRTY_FULL_SCOPE (DIRTY_SCOPE / 2)
27
28
struct
backing_dev_info
;
29
30
/*
31
* fs/fs-writeback.c
32
*/
33
enum
writeback_sync_modes
{
34
WB_SYNC_NONE
,
/* Don't wait on anything */
35
WB_SYNC_ALL
,
/* Wait on every mapping */
36
};
37
38
/*
39
* why some writeback work was initiated
40
*/
41
enum
wb_reason
{
42
WB_REASON_BACKGROUND
,
43
WB_REASON_TRY_TO_FREE_PAGES
,
44
WB_REASON_SYNC
,
45
WB_REASON_PERIODIC
,
46
WB_REASON_LAPTOP_TIMER
,
47
WB_REASON_FREE_MORE_MEM
,
48
WB_REASON_FS_FREE_SPACE
,
49
WB_REASON_FORKER_THREAD
,
50
51
WB_REASON_MAX
,
52
};
53
extern
const
char
*
wb_reason_name
[];
54
55
/*
56
* A control structure which tells the writeback code what to do. These are
57
* always on the stack, and hence need no locking. They are always initialised
58
* in a manner such that unspecified fields are set to zero.
59
*/
60
struct
writeback_control
{
61
long
nr_to_write
;
/* Write this many pages, and decrement
62
this for each page written */
63
long
pages_skipped
;
/* Pages which were not written */
64
65
/*
66
* For a_ops->writepages(): if start or end are non-zero then this is
67
* a hint that the filesystem need only write out the pages inside that
68
* byterange. The byte at `end' is included in the writeout request.
69
*/
70
loff_t
range_start
;
71
loff_t
range_end
;
72
73
enum
writeback_sync_modes
sync_mode
;
74
75
unsigned
for_kupdate
:1;
/* A kupdate writeback */
76
unsigned
for_background
:1;
/* A background writeback */
77
unsigned
tagged_writepages
:1;
/* tag-and-write to avoid livelock */
78
unsigned
for_reclaim
:1;
/* Invoked from the page allocator */
79
unsigned
range_cyclic
:1;
/* range_start is cyclic */
80
};
81
82
/*
83
* fs/fs-writeback.c
84
*/
85
struct
bdi_writeback
;
86
int
inode_wait
(
void
*);
87
void
writeback_inodes_sb
(
struct
super_block
*,
enum
wb_reason
reason
);
88
void
writeback_inodes_sb_nr
(
struct
super_block
*,
unsigned
long
nr
,
89
enum
wb_reason
reason
);
90
int
writeback_inodes_sb_if_idle
(
struct
super_block
*,
enum
wb_reason
reason
);
91
int
writeback_inodes_sb_nr_if_idle
(
struct
super_block
*,
unsigned
long
nr
,
92
enum
wb_reason
reason
);
93
void
sync_inodes_sb
(
struct
super_block
*);
94
long
writeback_inodes_wb
(
struct
bdi_writeback
*
wb
,
long
nr_pages,
95
enum
wb_reason
reason
);
96
long
wb_do_writeback
(
struct
bdi_writeback
*
wb
,
int
force_wait);
97
void
wakeup_flusher_threads
(
long
nr_pages,
enum
wb_reason
reason
);
98
void
inode_wait_for_writeback
(
struct
inode
*
inode
);
99
100
/* writeback.h requires fs.h; it, too, is not included from here. */
101
static
inline
void
wait_on_inode(
struct
inode
*
inode
)
102
{
103
might_sleep
();
104
wait_on_bit(&inode->
i_state
,
__I_NEW
,
inode_wait
,
TASK_UNINTERRUPTIBLE
);
105
}
106
107
/*
108
* mm/page-writeback.c
109
*/
110
#ifdef CONFIG_BLOCK
111
void
laptop_io_completion(
struct
backing_dev_info
*
info
);
112
void
laptop_sync_completion(
void
);
113
void
laptop_mode_sync(
struct
work_struct
*
work
);
114
void
laptop_mode_timer_fn(
unsigned
long
data
);
115
#else
116
static
inline
void
laptop_sync_completion(
void
) { }
117
#endif
118
void
throttle_vm_writeout
(
gfp_t
gfp_mask
);
119
bool
zone_dirty_ok
(
struct
zone
*
zone
);
120
121
extern
unsigned
long
global_dirty_limit
;
122
123
/* These are exported to sysctl. */
124
extern
int
dirty_background_ratio
;
125
extern
unsigned
long
dirty_background_bytes
;
126
extern
int
vm_dirty_ratio
;
127
extern
unsigned
long
vm_dirty_bytes
;
128
extern
unsigned
int
dirty_writeback_interval
;
129
extern
unsigned
int
dirty_expire_interval
;
130
extern
int
vm_highmem_is_dirtyable
;
131
extern
int
block_dump
;
132
extern
int
laptop_mode
;
133
134
extern
int
dirty_background_ratio_handler
(
struct
ctl_table
*
table
,
int
write
,
135
void
__user *
buffer
,
size_t
*lenp,
136
loff_t *ppos);
137
extern
int
dirty_background_bytes_handler
(
struct
ctl_table
*
table
,
int
write
,
138
void
__user *
buffer
,
size_t
*lenp,
139
loff_t *ppos);
140
extern
int
dirty_ratio_handler
(
struct
ctl_table
*
table
,
int
write
,
141
void
__user *
buffer
,
size_t
*lenp,
142
loff_t *ppos);
143
extern
int
dirty_bytes_handler
(
struct
ctl_table
*
table
,
int
write
,
144
void
__user *
buffer
,
size_t
*lenp,
145
loff_t *ppos);
146
147
struct
ctl_table
;
148
int
dirty_writeback_centisecs_handler
(
struct
ctl_table
*,
int
,
149
void
__user *,
size_t
*, loff_t *);
150
151
void
global_dirty_limits
(
unsigned
long
*pbackground,
unsigned
long
*pdirty);
152
unsigned
long
bdi_dirty_limit
(
struct
backing_dev_info
*bdi,
153
unsigned
long
dirty
);
154
155
void
__bdi_update_bandwidth
(
struct
backing_dev_info
*bdi,
156
unsigned
long
thresh,
157
unsigned
long
bg_thresh,
158
unsigned
long
dirty
,
159
unsigned
long
bdi_thresh,
160
unsigned
long
bdi_dirty,
161
unsigned
long
start_time
);
162
163
void
page_writeback_init
(
void
);
164
void
balance_dirty_pages_ratelimited_nr
(
struct
address_space
*
mapping
,
165
unsigned
long
nr_pages_dirtied);
166
167
static
inline
void
168
balance_dirty_pages_ratelimited(
struct
address_space
*
mapping
)
169
{
170
balance_dirty_pages_ratelimited_nr
(mapping, 1);
171
}
172
173
typedef
int
(*
writepage_t
)(
struct
page
*
page
,
struct
writeback_control
*wbc,
174
void
*
data
);
175
176
int
generic_writepages
(
struct
address_space
*
mapping
,
177
struct
writeback_control
*wbc);
178
void
tag_pages_for_writeback
(
struct
address_space
*
mapping
,
179
pgoff_t
start
,
pgoff_t
end
);
180
int
write_cache_pages
(
struct
address_space
*
mapping
,
181
struct
writeback_control
*wbc,
writepage_t
writepage,
182
void
*
data
);
183
int
do_writepages
(
struct
address_space
*
mapping
,
struct
writeback_control
*wbc);
184
void
set_page_dirty_balance
(
struct
page *page,
int
page_mkwrite);
185
void
writeback_set_ratelimit
(
void
);
186
void
tag_pages_for_writeback
(
struct
address_space
*
mapping
,
187
pgoff_t
start
,
pgoff_t
end
);
188
189
void
account_page_redirty
(
struct
page *page);
190
191
#endif
/* WRITEBACK_H */
Generated on Thu Jan 10 2013 14:52:52 for Linux Kernel by
1.8.2