Blame view

include/linux/writeback.h 6.29 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

ffd1f609a   Wu Fengguang   writeback: introd...
9
  /*
1a12d8bd7   Wu Fengguang   writeback: scale ...
10
11
12
13
   * 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...
14
15
16
17
18
19
20
21
   * 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 ...
22
23
  #define DIRTY_SCOPE		8
  #define DIRTY_FULL_SCOPE	(DIRTY_SCOPE / 2)
ffd1f609a   Wu Fengguang   writeback: introd...
24

1a12d8bd7   Wu Fengguang   writeback: scale ...
25
26
27
28
  /*
   * 4MB minimal write chunk size
   */
  #define MIN_WRITEBACK_PAGES	(4096UL >> (PAGE_CACHE_SHIFT - 10))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
  struct backing_dev_info;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
33
34
35
   * 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
36
37
38
  };
  
  /*
0e175a183   Curt Wohlgemuth   writeback: Add a ...
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
   * 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
56
57
58
59
60
   * 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
61
  	enum writeback_sync_modes sync_mode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
66
67
68
69
70
  	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...
71
72
  	loff_t range_start;
  	loff_t range_end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73

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

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

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
149
  struct ctl_table;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
150
  int dirty_writeback_centisecs_handler(struct ctl_table *, int,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
151
  				      void __user *, size_t *, loff_t *);
16c4042f0   Wu Fengguang   writeback: avoid ...
152
153
154
  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...
155

e98be2d59   Wu Fengguang   writeback: bdi wr...
156
  void __bdi_update_bandwidth(struct backing_dev_info *bdi,
c42843f2f   Wu Fengguang   writeback: introd...
157
  			    unsigned long thresh,
af6a31138   Wu Fengguang   writeback: add bg...
158
  			    unsigned long bg_thresh,
c42843f2f   Wu Fengguang   writeback: introd...
159
160
161
  			    unsigned long dirty,
  			    unsigned long bdi_thresh,
  			    unsigned long bdi_dirty,
e98be2d59   Wu Fengguang   writeback: bdi wr...
162
  			    unsigned long start_time);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
  void page_writeback_init(void);
fa5a734e4   Andrew Morton   [PATCH] balance_d...
164
165
166
167
168
169
170
171
  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...
172
173
  typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
  				void *data);
0ea971801   Miklos Szeredi   consolidate gener...
174
175
  int generic_writepages(struct address_space *mapping,
  		       struct writeback_control *wbc);
5b41d9243   Eric Sandeen   ext4: implement w...
176
177
  void tag_pages_for_writeback(struct address_space *mapping,
  			     pgoff_t start, pgoff_t end);
0ea971801   Miklos Szeredi   consolidate gener...
178
179
180
  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
181
  int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
a200ee182   Peter Zijlstra   mm: set_page_dirt...
182
  void set_page_dirty_balance(struct page *page, int page_mkwrite);
2d1d43f6a   Chandra Seetharaman   [PATCH] call mm/p...
183
  void writeback_set_ratelimit(void);
92c09c041   Namhyung Kim   mm: declare some ...
184
185
  void tag_pages_for_writeback(struct address_space *mapping,
  			     pgoff_t start, pgoff_t end);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
186
187
188
189
190
191
192
  
  /* pdflush.c */
  extern int nr_pdflush_threads;	/* Global so it can be exported to sysctl
  				   read-only. */
  
  
  #endif		/* WRITEBACK_H */