LCOV - code coverage report
Current view: top level - include/linux - pagevec.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 16 18 88.9 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * include/linux/pagevec.h
       4             :  *
       5             :  * In many places it is efficient to batch an operation up against multiple
       6             :  * pages.  A pagevec is a multipage container which is used for that.
       7             :  */
       8             : 
       9             : #ifndef _LINUX_PAGEVEC_H
      10             : #define _LINUX_PAGEVEC_H
      11             : 
      12             : #include <linux/xarray.h>
      13             : 
      14             : /* 15 pointers + header align the pagevec structure to a power of two */
      15             : #define PAGEVEC_SIZE    15
      16             : 
      17             : struct page;
      18             : struct address_space;
      19             : 
      20             : struct pagevec {
      21             :         unsigned char nr;
      22             :         bool percpu_pvec_drained;
      23             :         struct page *pages[PAGEVEC_SIZE];
      24             : };
      25             : 
      26             : void __pagevec_release(struct pagevec *pvec);
      27             : void __pagevec_lru_add(struct pagevec *pvec);
      28             : void pagevec_remove_exceptionals(struct pagevec *pvec);
      29             : unsigned pagevec_lookup_range(struct pagevec *pvec,
      30             :                               struct address_space *mapping,
      31             :                               pgoff_t *start, pgoff_t end);
      32           0 : static inline unsigned pagevec_lookup(struct pagevec *pvec,
      33             :                                       struct address_space *mapping,
      34             :                                       pgoff_t *start)
      35             : {
      36           0 :         return pagevec_lookup_range(pvec, mapping, start, (pgoff_t)-1);
      37             : }
      38             : 
      39             : unsigned pagevec_lookup_range_tag(struct pagevec *pvec,
      40             :                 struct address_space *mapping, pgoff_t *index, pgoff_t end,
      41             :                 xa_mark_t tag);
      42             : static inline unsigned pagevec_lookup_tag(struct pagevec *pvec,
      43             :                 struct address_space *mapping, pgoff_t *index, xa_mark_t tag)
      44             : {
      45             :         return pagevec_lookup_range_tag(pvec, mapping, index, (pgoff_t)-1, tag);
      46             : }
      47             : 
      48        2626 : static inline void pagevec_init(struct pagevec *pvec)
      49             : {
      50        2626 :         pvec->nr = 0;
      51        2486 :         pvec->percpu_pvec_drained = false;
      52        1747 : }
      53             : 
      54       17635 : static inline void pagevec_reinit(struct pagevec *pvec)
      55             : {
      56       17635 :         pvec->nr = 0;
      57             : }
      58             : 
      59      275643 : static inline unsigned pagevec_count(struct pagevec *pvec)
      60             : {
      61      198885 :         return pvec->nr;
      62             : }
      63             : 
      64      113714 : static inline unsigned pagevec_space(struct pagevec *pvec)
      65             : {
      66      113714 :         return PAGEVEC_SIZE - pvec->nr;
      67             : }
      68             : 
      69             : /*
      70             :  * Add a page to a pagevec.  Returns the number of slots still available.
      71             :  */
      72      113714 : static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page)
      73             : {
      74      113714 :         pvec->pages[pvec->nr++] = page;
      75      113714 :         return pagevec_space(pvec);
      76             : }
      77             : 
      78         722 : static inline void pagevec_release(struct pagevec *pvec)
      79             : {
      80         722 :         if (pagevec_count(pvec))
      81         720 :                 __pagevec_release(pvec);
      82             : }
      83             : 
      84             : #endif /* _LINUX_PAGEVEC_H */

Generated by: LCOV version 1.14