Blame view

include/linux/writeback.h 6.26 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
f30c22695   Uwe Zeisberger   fix file specific...
2
   * include/linux/writeback.h
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
   */
  #ifndef WRITEBACK_H
  #define WRITEBACK_H
e8edc6e03   Alexey Dobriyan   Detach sched.h fr...
6
  #include <linux/sched.h>
f5ff8422b   Jens Axboe   Fix warnings with...
7
  #include <linux/fs.h>
e8edc6e03   Alexey Dobriyan   Detach sched.h fr...
8

54848d73f   Wu Fengguang   writeback: charge...
9
  DECLARE_PER_CPU(int, dirty_throttle_leaks);
ffd1f609a   Wu Fengguang   writeback: introd...
10
  /*
1a12d8bd7   Wu Fengguang   writeback: scale ...
11
12
13
14
   * The 1/4 region under the global dirty thresh is for smooth dirty throttling:
   *
   *	(thresh - thresh/DIRTY_FULL_SCOPE, thresh)
   *
ffd1f609a   Wu Fengguang   writeback: introd...
15
16
17
18
19
20
21
22
   * Further beyond, all dirtier tasks will enter a loop waiting (possibly long
   * time) for the dirty pages to drop, unless written enough pages.
   *
   * The global dirty threshold is normally equal to the global dirty limit,
   * except when the system suddenly allocates a lot of anonymous memory and
   * knocks down the global dirty threshold quickly, in which case the global
   * dirty limit will follow down slowly to prevent livelocking all dirtier tasks.
   */
1a12d8bd7   Wu Fengguang   writeback: scale ...
23
24
  #define DIRTY_SCOPE		8
  #define DIRTY_FULL_SCOPE	(DIRTY_SCOPE / 2)
ffd1f609a   Wu Fengguang   writeback: introd...
25

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  struct backing_dev_info;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
   * fs/fs-writeback.c
   */
  enum writeback_sync_modes {
  	WB_SYNC_NONE,	/* Don't wait on anything */
  	WB_SYNC_ALL,	/* Wait on every mapping */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
34
35
  };
  
  /*
0e175a183   Curt Wohlgemuth   writeback: Add a ...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
   * why some writeback work was initiated
   */
  enum wb_reason {
  	WB_REASON_BACKGROUND,
  	WB_REASON_TRY_TO_FREE_PAGES,
  	WB_REASON_SYNC,
  	WB_REASON_PERIODIC,
  	WB_REASON_LAPTOP_TIMER,
  	WB_REASON_FREE_MORE_MEM,
  	WB_REASON_FS_FREE_SPACE,
  	WB_REASON_FORKER_THREAD,
  
  	WB_REASON_MAX,
  };
  extern const char *wb_reason_name[];
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53
54
55
56
57
   * A control structure which tells the writeback code what to do.  These are
   * always on the stack, and hence need no locking.  They are always initialised
   * in a manner such that unspecified fields are set to zero.
   */
  struct writeback_control {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
  	enum writeback_sync_modes sync_mode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
61
62
63
64
65
66
67
  	long nr_to_write;		/* Write this many pages, and decrement
  					   this for each page written */
  	long pages_skipped;		/* Pages which were not written */
  
  	/*
  	 * For a_ops->writepages(): is start or end are non-zero then this is
  	 * a hint that the filesystem need only write out the pages inside that
  	 * byterange.  The byte at `end' is included in the writeout request.
  	 */
111ebb6e6   OGAWA Hirofumi   [PATCH] writeback...
68
69
  	loff_t range_start;
  	loff_t range_end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70

22905f775   Andrew Morton   identify multipag...
71
  	unsigned for_kupdate:1;		/* A kupdate writeback */
b17621fed   Wu Fengguang   writeback: introd...
72
  	unsigned for_background:1;	/* A background writeback */
6e6938b6d   Wu Fengguang   writeback: introd...
73
  	unsigned tagged_writepages:1;	/* tag-and-write to avoid livelock */
22905f775   Andrew Morton   identify multipag...
74
  	unsigned for_reclaim:1;		/* Invoked from the page allocator */
111ebb6e6   OGAWA Hirofumi   [PATCH] writeback...
75
  	unsigned range_cyclic:1;	/* range_start is cyclic */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
  };
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
79
80
   * fs/fs-writeback.c
   */	
03ba3782e   Jens Axboe   writeback: switch...
81
  struct bdi_writeback;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
82
  int inode_wait(void *);
0e175a183   Curt Wohlgemuth   writeback: Add a ...
83
84
85
86
87
88
  void writeback_inodes_sb(struct super_block *, enum wb_reason reason);
  void writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
  							enum wb_reason reason);
  int writeback_inodes_sb_if_idle(struct super_block *, enum wb_reason reason);
  int writeback_inodes_sb_nr_if_idle(struct super_block *, unsigned long nr,
  							enum wb_reason reason);
b6e51316d   Jens Axboe   writeback: separa...
89
  void sync_inodes_sb(struct super_block *);
0e175a183   Curt Wohlgemuth   writeback: Add a ...
90
91
  long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
  				enum wb_reason reason);
03ba3782e   Jens Axboe   writeback: switch...
92
  long wb_do_writeback(struct bdi_writeback *wb, int force_wait);
0e175a183   Curt Wohlgemuth   writeback: Add a ...
93
  void wakeup_flusher_threads(long nr_pages, enum wb_reason reason);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
97
98
  
  /* writeback.h requires fs.h; it, too, is not included from here. */
  static inline void wait_on_inode(struct inode *inode)
  {
  	might_sleep();
eaff8079d   Christoph Hellwig   kill I_LOCK
99
  	wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
  }
1c0eeaf56   Joern Engel   introduce I_SYNC
101
102
103
104
105
106
  static inline void inode_sync_wait(struct inode *inode)
  {
  	might_sleep();
  	wait_on_bit(&inode->i_state, __I_SYNC, inode_wait,
  							TASK_UNINTERRUPTIBLE);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
108
109
110
  
  /*
   * mm/page-writeback.c
   */
c2c4986ed   Jens Axboe   writeback: fix pr...
111
  #ifdef CONFIG_BLOCK
31373d09d   Matthew Garrett   laptop-mode: Make...
112
  void laptop_io_completion(struct backing_dev_info *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
  void laptop_sync_completion(void);
31373d09d   Matthew Garrett   laptop-mode: Make...
114
115
  void laptop_mode_sync(struct work_struct *work);
  void laptop_mode_timer_fn(unsigned long data);
c2c4986ed   Jens Axboe   writeback: fix pr...
116
117
118
  #else
  static inline void laptop_sync_completion(void) { }
  #endif
232ea4d69   Andrew Morton   [PATCH] throttle_...
119
  void throttle_vm_writeout(gfp_t gfp_mask);
a756cf590   Johannes Weiner   mm: try to distri...
120
  bool zone_dirty_ok(struct zone *zone);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121

c42843f2f   Wu Fengguang   writeback: introd...
122
  extern unsigned long global_dirty_limit;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
123
124
  /* These are exported to sysctl. */
  extern int dirty_background_ratio;
2da02997e   David Rientjes   mm: add dirty_bac...
125
  extern unsigned long dirty_background_bytes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
  extern int vm_dirty_ratio;
2da02997e   David Rientjes   mm: add dirty_bac...
127
  extern unsigned long vm_dirty_bytes;
704503d83   Alexey Dobriyan   mm: fix proc_doin...
128
129
  extern unsigned int dirty_writeback_interval;
  extern unsigned int dirty_expire_interval;
195cf453d   Bron Gondwana   mm/page-writeback...
130
  extern int vm_highmem_is_dirtyable;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
  extern int block_dump;
  extern int laptop_mode;
2da02997e   David Rientjes   mm: add dirty_bac...
133
  extern int dirty_background_ratio_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
134
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
135
136
  		loff_t *ppos);
  extern int dirty_background_bytes_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
137
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
138
  		loff_t *ppos);
04fbfdc14   Peter Zijlstra   mm: per device di...
139
  extern int dirty_ratio_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
140
  		void __user *buffer, size_t *lenp,
04fbfdc14   Peter Zijlstra   mm: per device di...
141
  		loff_t *ppos);
2da02997e   David Rientjes   mm: add dirty_bac...
142
  extern int dirty_bytes_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
143
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
144
  		loff_t *ppos);
04fbfdc14   Peter Zijlstra   mm: per device di...
145

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
  struct ctl_table;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
147
  int dirty_writeback_centisecs_handler(struct ctl_table *, int,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
  				      void __user *, size_t *, loff_t *);
16c4042f0   Wu Fengguang   writeback: avoid ...
149
150
151
  void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty);
  unsigned long bdi_dirty_limit(struct backing_dev_info *bdi,
  			       unsigned long dirty);
cf0ca9fe5   Peter Zijlstra   mm: bdi: export B...
152

e98be2d59   Wu Fengguang   writeback: bdi wr...
153
  void __bdi_update_bandwidth(struct backing_dev_info *bdi,
c42843f2f   Wu Fengguang   writeback: introd...
154
  			    unsigned long thresh,
af6a31138   Wu Fengguang   writeback: add bg...
155
  			    unsigned long bg_thresh,
c42843f2f   Wu Fengguang   writeback: introd...
156
157
158
  			    unsigned long dirty,
  			    unsigned long bdi_thresh,
  			    unsigned long bdi_dirty,
e98be2d59   Wu Fengguang   writeback: bdi wr...
159
  			    unsigned long start_time);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
  void page_writeback_init(void);
fa5a734e4   Andrew Morton   [PATCH] balance_d...
161
162
163
164
165
166
167
168
  void balance_dirty_pages_ratelimited_nr(struct address_space *mapping,
  					unsigned long nr_pages_dirtied);
  
  static inline void
  balance_dirty_pages_ratelimited(struct address_space *mapping)
  {
  	balance_dirty_pages_ratelimited_nr(mapping, 1);
  }
0ea971801   Miklos Szeredi   consolidate gener...
169
170
  typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
  				void *data);
0ea971801   Miklos Szeredi   consolidate gener...
171
172
  int generic_writepages(struct address_space *mapping,
  		       struct writeback_control *wbc);
5b41d9243   Eric Sandeen   ext4: implement w...
173
174
  void tag_pages_for_writeback(struct address_space *mapping,
  			     pgoff_t start, pgoff_t end);
0ea971801   Miklos Szeredi   consolidate gener...
175
176
177
  int write_cache_pages(struct address_space *mapping,
  		      struct writeback_control *wbc, writepage_t writepage,
  		      void *data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178
  int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
a200ee182   Peter Zijlstra   mm: set_page_dirt...
179
  void set_page_dirty_balance(struct page *page, int page_mkwrite);
2d1d43f6a   Chandra Seetharaman   [PATCH] call mm/p...
180
  void writeback_set_ratelimit(void);
92c09c041   Namhyung Kim   mm: declare some ...
181
182
  void tag_pages_for_writeback(struct address_space *mapping,
  			     pgoff_t start, pgoff_t end);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183

2f800fbd7   Wu Fengguang   writeback: fix di...
184
  void account_page_redirty(struct page *page);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
185
186
187
188
189
190
  /* pdflush.c */
  extern int nr_pdflush_threads;	/* Global so it can be exported to sysctl
  				   read-only. */
  
  
  #endif		/* WRITEBACK_H */