2005-04-16 15:20:36 -07:00
/*
* 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 .
*/
2006-01-08 01:02:37 -08:00
# ifndef _LINUX_PAGEVEC_H
# define _LINUX_PAGEVEC_H
2005-04-16 15:20:36 -07:00
/* 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 ) ;
2013-07-03 15:02:32 -07:00
void __pagevec_lru_add ( struct pagevec * pvec ) ;
2014-04-03 14:47:46 -07:00
unsigned pagevec_lookup_entries ( struct pagevec * pvec ,
struct address_space * mapping ,
pgoff_t start , unsigned nr_entries ,
pgoff_t * indices ) ;
void pagevec_remove_exceptionals ( struct pagevec * pvec ) ;
2005-04-16 15:20:36 -07:00
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 ) ;
}
static inline void pagevec_release ( struct pagevec * pvec )
{
if ( pagevec_count ( pvec ) )
__pagevec_release ( pvec ) ;
}
2006-01-08 01:02:37 -08:00
# endif /* _LINUX_PAGEVEC_H */