Branch data Line data Source code
1 : : /*
2 : : * include/linux/pagevec.h
3 : : *
4 : : * In many places it is efficient to batch an operation up against multiple
5 : : * pages. A pagevec is a multipage container which is used for that.
6 : : */
7 : :
8 : : #ifndef _LINUX_PAGEVEC_H
9 : : #define _LINUX_PAGEVEC_H
10 : :
11 : : /* 14 pointers + two long's align the pagevec structure to a power of two */
12 : : #define PAGEVEC_SIZE 14
13 : :
14 : : struct page;
15 : : struct address_space;
16 : :
17 : : struct pagevec {
18 : : unsigned long nr;
19 : : unsigned long cold;
20 : : struct page *pages[PAGEVEC_SIZE];
21 : : };
22 : :
23 : : void __pagevec_release(struct pagevec *pvec);
24 : : void __pagevec_lru_add(struct pagevec *pvec);
25 : : unsigned pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
26 : : pgoff_t start, unsigned nr_pages);
27 : : unsigned pagevec_lookup_tag(struct pagevec *pvec,
28 : : struct address_space *mapping, pgoff_t *index, int tag,
29 : : unsigned nr_pages);
30 : :
31 : : static inline void pagevec_init(struct pagevec *pvec, int cold)
32 : : {
33 : 3057613 : pvec->nr = 0;
34 : 2103328 : pvec->cold = cold;
35 : : }
36 : :
37 : : static inline void pagevec_reinit(struct pagevec *pvec)
38 : : {
39 : 3107297 : pvec->nr = 0;
40 : : }
41 : :
42 : : static inline unsigned pagevec_count(struct pagevec *pvec)
43 : : {
44 : : return pvec->nr;
45 : : }
46 : :
47 : : static inline unsigned pagevec_space(struct pagevec *pvec)
48 : : {
49 : : return PAGEVEC_SIZE - pvec->nr;
50 : : }
51 : :
52 : : /*
53 : : * Add a page to a pagevec. Returns the number of slots still available.
54 : : */
55 : : static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page)
56 : : {
57 : 21037967 : pvec->pages[pvec->nr++] = page;
58 : : return pagevec_space(pvec);
59 : : }
60 : :
61 : 286864 : static inline void pagevec_release(struct pagevec *pvec)
62 : : {
63 [ + + ]: 578050 : if (pagevec_count(pvec))
[ + + # # ]
[ # # ][ + ]
[ + ][ + ]
[ + - ][ + - ]
[ # ][ - ]
[ - + ]
64 : 471515 : __pagevec_release(pvec);
65 : : }
66 : :
67 : : #endif /* _LINUX_PAGEVEC_H */
|