Blame view

include/linux/pagevec.h 2.22 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
  /*
   * include/linux/pagevec.h
   *
   * In many places it is efficient to batch an operation up against multiple
   * pages.  A pagevec is a multipage container which is used for that.
   */
788540141   David Howells   [PATCH] Permit mu...
7
8
  #ifndef _LINUX_PAGEVEC_H
  #define _LINUX_PAGEVEC_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
12
13
14
15
16
17
18
19
20
21
  /* 14 pointers + two long's align the pagevec structure to a power of two */
  #define PAGEVEC_SIZE	14
  
  struct page;
  struct address_space;
  
  struct pagevec {
  	unsigned long nr;
  	unsigned long cold;
  	struct page *pages[PAGEVEC_SIZE];
  };
  
  void __pagevec_release(struct pagevec *pvec);
5095ae837   Hugh Dickins   mm: fewer undersc...
22
  void __pagevec_lru_add(struct pagevec *pvec, enum lru_list lru);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
51
52
53
54
55
56
57
  unsigned pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
  		pgoff_t start, unsigned nr_pages);
  unsigned pagevec_lookup_tag(struct pagevec *pvec,
  		struct address_space *mapping, pgoff_t *index, int tag,
  		unsigned nr_pages);
  
  static inline void pagevec_init(struct pagevec *pvec, int cold)
  {
  	pvec->nr = 0;
  	pvec->cold = cold;
  }
  
  static inline void pagevec_reinit(struct pagevec *pvec)
  {
  	pvec->nr = 0;
  }
  
  static inline unsigned pagevec_count(struct pagevec *pvec)
  {
  	return pvec->nr;
  }
  
  static inline unsigned pagevec_space(struct pagevec *pvec)
  {
  	return PAGEVEC_SIZE - pvec->nr;
  }
  
  /*
   * Add a page to a pagevec.  Returns the number of slots still available.
   */
  static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page)
  {
  	pvec->pages[pvec->nr++] = page;
  	return pagevec_space(pvec);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
60
61
62
  static inline void pagevec_release(struct pagevec *pvec)
  {
  	if (pagevec_count(pvec))
  		__pagevec_release(pvec);
  }
4f98a2fee   Rik van Riel   vmscan: split LRU...
63
  static inline void __pagevec_lru_add_anon(struct pagevec *pvec)
f04e9ebbe   KOSAKI Motohiro   swap: use an arra...
64
  {
5095ae837   Hugh Dickins   mm: fewer undersc...
65
  	__pagevec_lru_add(pvec, LRU_INACTIVE_ANON);
f04e9ebbe   KOSAKI Motohiro   swap: use an arra...
66
  }
4f98a2fee   Rik van Riel   vmscan: split LRU...
67
  static inline void __pagevec_lru_add_active_anon(struct pagevec *pvec)
f04e9ebbe   KOSAKI Motohiro   swap: use an arra...
68
  {
5095ae837   Hugh Dickins   mm: fewer undersc...
69
  	__pagevec_lru_add(pvec, LRU_ACTIVE_ANON);
f04e9ebbe   KOSAKI Motohiro   swap: use an arra...
70
  }
4f98a2fee   Rik van Riel   vmscan: split LRU...
71
72
  static inline void __pagevec_lru_add_file(struct pagevec *pvec)
  {
5095ae837   Hugh Dickins   mm: fewer undersc...
73
  	__pagevec_lru_add(pvec, LRU_INACTIVE_FILE);
4f98a2fee   Rik van Riel   vmscan: split LRU...
74
75
76
77
  }
  
  static inline void __pagevec_lru_add_active_file(struct pagevec *pvec)
  {
5095ae837   Hugh Dickins   mm: fewer undersc...
78
  	__pagevec_lru_add(pvec, LRU_ACTIVE_FILE);
4f98a2fee   Rik van Riel   vmscan: split LRU...
79
  }
4f98a2fee   Rik van Riel   vmscan: split LRU...
80
81
82
83
84
85
86
  static inline void pagevec_lru_add_file(struct pagevec *pvec)
  {
  	if (pagevec_count(pvec))
  		__pagevec_lru_add_file(pvec);
  }
  
  static inline void pagevec_lru_add_anon(struct pagevec *pvec)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
88
  {
  	if (pagevec_count(pvec))
4f98a2fee   Rik van Riel   vmscan: split LRU...
89
  		__pagevec_lru_add_anon(pvec);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
90
  }
788540141   David Howells   [PATCH] Permit mu...
91
92
  
  #endif /* _LINUX_PAGEVEC_H */