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