Blame view

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

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
12
13
14
15
  struct backing_dev_info;
  
  extern spinlock_t inode_lock;
  extern struct list_head inode_in_use;
  extern struct list_head inode_unused;
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
18
19
20
   * 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
21
22
23
24
25
26
27
28
  };
  
  /*
   * 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
29
30
31
  	enum writeback_sync_modes sync_mode;
  	unsigned long *older_than_this;	/* If !NULL, only write back inodes
  					   older than this */
f11c9c5c2   Edward Shishkin   vfs: improve writ...
32
33
34
  	unsigned long wb_start;         /* Time writeback_inodes_wb was
  					   called. This is needed to avoid
  					   extra jobs and livelock */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
37
38
39
40
41
42
43
  	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...
44
45
  	loff_t range_start;
  	loff_t range_end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46

22905f775   Andrew Morton   identify multipag...
47
48
49
  	unsigned nonblocking:1;		/* Don't get stuck on request queues */
  	unsigned encountered_congestion:1; /* An output: a queue is full */
  	unsigned for_kupdate:1;		/* A kupdate writeback */
b17621fed   Wu Fengguang   writeback: introd...
50
  	unsigned for_background:1;	/* A background writeback */
22905f775   Andrew Morton   identify multipag...
51
  	unsigned for_reclaim:1;		/* Invoked from the page allocator */
111ebb6e6   OGAWA Hirofumi   [PATCH] writeback...
52
  	unsigned range_cyclic:1;	/* range_start is cyclic */
8bc3be275   Fengguang Wu   writeback: speed ...
53
  	unsigned more_io:1;		/* more io to be dispatched */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
55
56
  };
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
58
   * fs/fs-writeback.c
   */	
03ba3782e   Jens Axboe   writeback: switch...
59
  struct bdi_writeback;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
  int inode_wait(void *);
b6e51316d   Jens Axboe   writeback: separa...
61
  void writeback_inodes_sb(struct super_block *);
17bd55d03   Eric Sandeen   fs-writeback: Add...
62
  int writeback_inodes_sb_if_idle(struct super_block *);
b6e51316d   Jens Axboe   writeback: separa...
63
  void sync_inodes_sb(struct super_block *);
9c3a8ee8a   Christoph Hellwig   writeback: remove...
64
65
  void writeback_inodes_wb(struct bdi_writeback *wb,
  		struct writeback_control *wbc);
03ba3782e   Jens Axboe   writeback: switch...
66
67
  long wb_do_writeback(struct bdi_writeback *wb, int force_wait);
  void wakeup_flusher_threads(long nr_pages);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
71
72
  
  /* 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
73
  	wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
  }
1c0eeaf56   Joern Engel   introduce I_SYNC
75
76
77
78
79
80
  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
81
82
83
84
  
  /*
   * mm/page-writeback.c
   */
c2c4986ed   Jens Axboe   writeback: fix pr...
85
  #ifdef CONFIG_BLOCK
31373d09d   Matthew Garrett   laptop-mode: Make...
86
  void laptop_io_completion(struct backing_dev_info *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
  void laptop_sync_completion(void);
31373d09d   Matthew Garrett   laptop-mode: Make...
88
89
  void laptop_mode_sync(struct work_struct *work);
  void laptop_mode_timer_fn(unsigned long data);
c2c4986ed   Jens Axboe   writeback: fix pr...
90
91
92
  #else
  static inline void laptop_sync_completion(void) { }
  #endif
232ea4d69   Andrew Morton   [PATCH] throttle_...
93
  void throttle_vm_writeout(gfp_t gfp_mask);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
  
  /* These are exported to sysctl. */
  extern int dirty_background_ratio;
2da02997e   David Rientjes   mm: add dirty_bac...
97
  extern unsigned long dirty_background_bytes;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
  extern int vm_dirty_ratio;
2da02997e   David Rientjes   mm: add dirty_bac...
99
  extern unsigned long vm_dirty_bytes;
704503d83   Alexey Dobriyan   mm: fix proc_doin...
100
101
  extern unsigned int dirty_writeback_interval;
  extern unsigned int dirty_expire_interval;
195cf453d   Bron Gondwana   mm/page-writeback...
102
  extern int vm_highmem_is_dirtyable;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
  extern int block_dump;
  extern int laptop_mode;
3eefae994   Steven Rostedt   ftrace: limit tra...
105
  extern unsigned long determine_dirtyable_memory(void);
2da02997e   David Rientjes   mm: add dirty_bac...
106
  extern int dirty_background_ratio_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
107
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
108
109
  		loff_t *ppos);
  extern int dirty_background_bytes_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
110
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
111
  		loff_t *ppos);
04fbfdc14   Peter Zijlstra   mm: per device di...
112
  extern int dirty_ratio_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
113
  		void __user *buffer, size_t *lenp,
04fbfdc14   Peter Zijlstra   mm: per device di...
114
  		loff_t *ppos);
2da02997e   David Rientjes   mm: add dirty_bac...
115
  extern int dirty_bytes_handler(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
116
  		void __user *buffer, size_t *lenp,
2da02997e   David Rientjes   mm: add dirty_bac...
117
  		loff_t *ppos);
04fbfdc14   Peter Zijlstra   mm: per device di...
118

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
  struct ctl_table;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
120
  int dirty_writeback_centisecs_handler(struct ctl_table *, int,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121
  				      void __user *, size_t *, loff_t *);
16c4042f0   Wu Fengguang   writeback: avoid ...
122
123
124
  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...
125

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
  void page_writeback_init(void);
fa5a734e4   Andrew Morton   [PATCH] balance_d...
127
128
129
130
131
132
133
134
  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...
135
136
  typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
  				void *data);
0ea971801   Miklos Szeredi   consolidate gener...
137
138
139
140
141
  int generic_writepages(struct address_space *mapping,
  		       struct writeback_control *wbc);
  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
142
  int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
a200ee182   Peter Zijlstra   mm: set_page_dirt...
143
  void set_page_dirty_balance(struct page *page, int page_mkwrite);
2d1d43f6a   Chandra Seetharaman   [PATCH] call mm/p...
144
  void writeback_set_ratelimit(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
147
148
149
150
151
  
  /* pdflush.c */
  extern int nr_pdflush_threads;	/* Global so it can be exported to sysctl
  				   read-only. */
  
  
  #endif		/* WRITEBACK_H */