xref: /freebsd/sys/compat/linuxkpi/common/include/linux/pagevec.h (revision 9e9c682ff3a1aec20a7e5f5b1dd88ceaec7c3950)
1 /* Public domain. */
2 
3 #ifndef	_LINUXKPI_LINUX_PAGEVEC_H_
4 #define	_LINUXKPI_LINUX_PAGEVEC_H_
5 
6 #include <sys/types.h>
7 #include <sys/systm.h>
8 #include <sys/errno.h>
9 
10 #include <linux/pagemap.h>
11 
12 #define PAGEVEC_SIZE 15
13 
14 struct pagevec {
15 	uint8_t	nr;
16 	struct page *pages[PAGEVEC_SIZE];
17 };
18 
19 static inline unsigned int
pagevec_space(struct pagevec * pvec)20 pagevec_space(struct pagevec *pvec)
21 {
22 	return PAGEVEC_SIZE - pvec->nr;
23 }
24 
25 static inline void
pagevec_init(struct pagevec * pvec)26 pagevec_init(struct pagevec *pvec)
27 {
28 	pvec->nr = 0;
29 }
30 
31 static inline void
pagevec_reinit(struct pagevec * pvec)32 pagevec_reinit(struct pagevec *pvec)
33 {
34 	pvec->nr = 0;
35 }
36 
37 static inline unsigned int
pagevec_count(struct pagevec * pvec)38 pagevec_count(struct pagevec *pvec)
39 {
40 	return pvec->nr;
41 }
42 
43 static inline unsigned int
pagevec_add(struct pagevec * pvec,struct page * page)44 pagevec_add(struct pagevec *pvec, struct page *page)
45 {
46 	pvec->pages[pvec->nr++] = page;
47 	return PAGEVEC_SIZE - pvec->nr;
48 }
49 
50 static inline void
__pagevec_release(struct pagevec * pvec)51 __pagevec_release(struct pagevec *pvec)
52 {
53 	release_pages(pvec->pages, pagevec_count(pvec));
54 	pagevec_reinit(pvec);
55 }
56 
57 static inline void
pagevec_release(struct pagevec * pvec)58 pagevec_release(struct pagevec *pvec)
59 {
60 	if (pagevec_count(pvec))
61 		__pagevec_release(pvec);
62 }
63 
64 static inline void
check_move_unevictable_pages(struct pagevec * pvec)65 check_move_unevictable_pages(struct pagevec *pvec)
66 {
67 }
68 
69 #endif	/* _LINUXKPI_LINUX_PAGEVEC_H_ */
70