pagevec.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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. /* 14 pointers + two long's align the pagevec structure to a power of two */
  8. #define PAGEVEC_SIZE 14
  9. struct page;
  10. struct address_space;
  11. struct pagevec {
  12. unsigned long nr;
  13. unsigned long cold;
  14. struct page *pages[PAGEVEC_SIZE];
  15. };
  16. void __pagevec_release(struct pagevec *pvec);
  17. void __pagevec_release_nonlru(struct pagevec *pvec);
  18. void __pagevec_free(struct pagevec *pvec);
  19. void __pagevec_lru_add(struct pagevec *pvec);
  20. void __pagevec_lru_add_active(struct pagevec *pvec);
  21. void pagevec_strip(struct pagevec *pvec);
  22. unsigned pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
  23. pgoff_t start, unsigned nr_pages);
  24. unsigned pagevec_lookup_tag(struct pagevec *pvec,
  25. struct address_space *mapping, pgoff_t *index, int tag,
  26. unsigned nr_pages);
  27. static inline void pagevec_init(struct pagevec *pvec, int cold)
  28. {
  29. pvec->nr = 0;
  30. pvec->cold = cold;
  31. }
  32. static inline void pagevec_reinit(struct pagevec *pvec)
  33. {
  34. pvec->nr = 0;
  35. }
  36. static inline unsigned pagevec_count(struct pagevec *pvec)
  37. {
  38. return pvec->nr;
  39. }
  40. static inline unsigned pagevec_space(struct pagevec *pvec)
  41. {
  42. return PAGEVEC_SIZE - pvec->nr;
  43. }
  44. /*
  45.  * Add a page to a pagevec.  Returns the number of slots still available.
  46.  */
  47. static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page)
  48. {
  49. pvec->pages[pvec->nr++] = page;
  50. return pagevec_space(pvec);
  51. }
  52. static inline void pagevec_release(struct pagevec *pvec)
  53. {
  54. if (pagevec_count(pvec))
  55. __pagevec_release(pvec);
  56. }
  57. static inline void pagevec_release_nonlru(struct pagevec *pvec)
  58. {
  59. if (pagevec_count(pvec))
  60. __pagevec_release_nonlru(pvec);
  61. }
  62. static inline void pagevec_free(struct pagevec *pvec)
  63. {
  64. if (pagevec_count(pvec))
  65. __pagevec_free(pvec);
  66. }
  67. static inline void pagevec_lru_add(struct pagevec *pvec)
  68. {
  69. if (pagevec_count(pvec))
  70. __pagevec_lru_add(pvec);
  71. }