Blame view

include/linux/writeback.h 4.1 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>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
10
11
12
13
14
15
16
  struct backing_dev_info;
  
  extern spinlock_t inode_lock;
  extern struct list_head inode_in_use;
  extern struct list_head inode_unused;
  
  /*
   * Yes, writeback.h requires sched.h
   * No, sched.h is not included from here.
   */
22e2c507c   Jens Axboe   [PATCH] Update cf...
17
  static inline int task_is_pdflush(struct task_struct *task)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
  {
22e2c507c   Jens Axboe   [PATCH] Update cf...
19
  	return task->flags & PF_FLUSHER;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
  }
22e2c507c   Jens Axboe   [PATCH] Update cf...
21
  #define current_is_pdflush()	task_is_pdflush(current)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  /*
   * fs/fs-writeback.c
   */
  enum writeback_sync_modes {
  	WB_SYNC_NONE,	/* Don't wait on anything */
  	WB_SYNC_ALL,	/* Wait on every mapping */
  	WB_SYNC_HOLD,	/* Hold the inode on sb_dirty for sys_sync() */
  };
  
  /*
   * 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 {
  	struct backing_dev_info *bdi;	/* If !NULL, only write back this
  					   queue */
  	enum writeback_sync_modes sync_mode;
  	unsigned long *older_than_this;	/* If !NULL, only write back inodes
  					   older than this */
  	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...
51
52
  	loff_t range_start;
  	loff_t range_end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53

22905f775   Andrew Morton   identify multipag...
54
55
56
57
58
  	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 */
  	unsigned for_reclaim:1;		/* Invoked from the page allocator */
  	unsigned for_writepages:1;	/* This is a writepages() call */
111ebb6e6   OGAWA Hirofumi   [PATCH] writeback...
59
  	unsigned range_cyclic:1;	/* range_start is cyclic */
c63c7b051   Trond Myklebust   NFS: Fix a race w...
60
61
  
  	void *fs_private;		/* For use by ->writepages() */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
  };
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
   * fs/fs-writeback.c
   */	
  void writeback_inodes(struct writeback_control *wbc);
  void wake_up_inode(struct inode *inode);
  int inode_wait(void *);
  void sync_inodes_sb(struct super_block *, int wait);
  void sync_inodes(int wait);
  
  /* writeback.h requires fs.h; it, too, is not included from here. */
  static inline void wait_on_inode(struct inode *inode)
  {
  	might_sleep();
  	wait_on_bit(&inode->i_state, __I_LOCK, inode_wait,
  							TASK_UNINTERRUPTIBLE);
  }
  
  /*
   * mm/page-writeback.c
   */
687a21cee   Pekka J Enberg   [PATCH] rename wa...
84
  int wakeup_pdflush(long nr_pages);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
85
86
  void laptop_io_completion(void);
  void laptop_sync_completion(void);
232ea4d69   Andrew Morton   [PATCH] throttle_...
87
  void throttle_vm_writeout(gfp_t gfp_mask);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
90
91
  
  /* These are exported to sysctl. */
  extern int dirty_background_ratio;
  extern int vm_dirty_ratio;
f6ef94381   Bart Samwel   [PATCH] Represent...
92
93
  extern int dirty_writeback_interval;
  extern int dirty_expire_interval;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
97
98
99
100
101
102
  extern int block_dump;
  extern int laptop_mode;
  
  struct ctl_table;
  struct file;
  int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *,
  				      void __user *, size_t *, loff_t *);
  
  void page_writeback_init(void);
fa5a734e4   Andrew Morton   [PATCH] balance_d...
103
104
105
106
107
108
109
110
  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...
111
112
  typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
  				void *data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
  int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0);
0ea971801   Miklos Szeredi   consolidate gener...
114
115
116
117
118
  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
119
120
  int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
  int sync_page_range(struct inode *inode, struct address_space *mapping,
268fc16e3   OGAWA Hirofumi   [PATCH] export/ch...
121
122
123
  			loff_t pos, loff_t count);
  int sync_page_range_nolock(struct inode *inode, struct address_space *mapping,
  			   loff_t pos, loff_t count);
edc79b2a4   Peter Zijlstra   [PATCH] mm: balan...
124
  void set_page_dirty_balance(struct page *page);
2d1d43f6a   Chandra Seetharaman   [PATCH] call mm/p...
125
  void writeback_set_ratelimit(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
127
128
129
130
131
132
  
  /* pdflush.c */
  extern int nr_pdflush_threads;	/* Global so it can be exported to sysctl
  				   read-only. */
  
  
  #endif		/* WRITEBACK_H */