folio-compat.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * Compatibility functions which bloat the callers too much to make inline.
  3. * All of the callers of these functions should be converted to use folios
  4. * eventually.
  5. */
  6. #include <linux/migrate.h>
  7. #include <linux/pagemap.h>
  8. #include <linux/swap.h>
  9. #include "internal.h"
  10. struct address_space *page_mapping(struct page *page)
  11. {
  12. return folio_mapping(page_folio(page));
  13. }
  14. EXPORT_SYMBOL(page_mapping);
  15. void unlock_page(struct page *page)
  16. {
  17. return folio_unlock(page_folio(page));
  18. }
  19. EXPORT_SYMBOL(unlock_page);
  20. void end_page_writeback(struct page *page)
  21. {
  22. return folio_end_writeback(page_folio(page));
  23. }
  24. EXPORT_SYMBOL(end_page_writeback);
  25. void wait_on_page_writeback(struct page *page)
  26. {
  27. return folio_wait_writeback(page_folio(page));
  28. }
  29. EXPORT_SYMBOL_GPL(wait_on_page_writeback);
  30. void wait_for_stable_page(struct page *page)
  31. {
  32. return folio_wait_stable(page_folio(page));
  33. }
  34. EXPORT_SYMBOL_GPL(wait_for_stable_page);
  35. bool page_mapped(struct page *page)
  36. {
  37. return folio_mapped(page_folio(page));
  38. }
  39. EXPORT_SYMBOL(page_mapped);
  40. void mark_page_accessed(struct page *page)
  41. {
  42. folio_mark_accessed(page_folio(page));
  43. }
  44. EXPORT_SYMBOL(mark_page_accessed);
  45. bool set_page_writeback(struct page *page)
  46. {
  47. return folio_start_writeback(page_folio(page));
  48. }
  49. EXPORT_SYMBOL(set_page_writeback);
  50. bool set_page_dirty(struct page *page)
  51. {
  52. return folio_mark_dirty(page_folio(page));
  53. }
  54. EXPORT_SYMBOL(set_page_dirty);
  55. int __set_page_dirty_nobuffers(struct page *page)
  56. {
  57. return filemap_dirty_folio(page_mapping(page), page_folio(page));
  58. }
  59. EXPORT_SYMBOL(__set_page_dirty_nobuffers);
  60. bool clear_page_dirty_for_io(struct page *page)
  61. {
  62. return folio_clear_dirty_for_io(page_folio(page));
  63. }
  64. EXPORT_SYMBOL(clear_page_dirty_for_io);
  65. bool redirty_page_for_writepage(struct writeback_control *wbc,
  66. struct page *page)
  67. {
  68. return folio_redirty_for_writepage(wbc, page_folio(page));
  69. }
  70. EXPORT_SYMBOL(redirty_page_for_writepage);
  71. void lru_cache_add(struct page *page)
  72. {
  73. folio_add_lru(page_folio(page));
  74. }
  75. EXPORT_SYMBOL(lru_cache_add);
  76. void lru_cache_add_inactive_or_unevictable(struct page *page,
  77. struct vm_area_struct *vma)
  78. {
  79. folio_add_lru_vma(page_folio(page), vma);
  80. }
  81. int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
  82. pgoff_t index, gfp_t gfp)
  83. {
  84. return filemap_add_folio(mapping, page_folio(page), index, gfp);
  85. }
  86. EXPORT_SYMBOL(add_to_page_cache_lru);
  87. noinline
  88. struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index,
  89. int fgp_flags, gfp_t gfp)
  90. {
  91. struct folio *folio;
  92. folio = __filemap_get_folio(mapping, index, fgp_flags, gfp);
  93. if ((fgp_flags & FGP_HEAD) || !folio || xa_is_value(folio))
  94. return &folio->page;
  95. return folio_file_page(folio, index);
  96. }
  97. EXPORT_SYMBOL(pagecache_get_page);
  98. struct page *grab_cache_page_write_begin(struct address_space *mapping,
  99. pgoff_t index)
  100. {
  101. unsigned fgp_flags = FGP_LOCK | FGP_WRITE | FGP_CREAT | FGP_STABLE;
  102. return pagecache_get_page(mapping, index, fgp_flags,
  103. mapping_gfp_mask(mapping));
  104. }
  105. EXPORT_SYMBOL(grab_cache_page_write_begin);
  106. void delete_from_page_cache(struct page *page)
  107. {
  108. return filemap_remove_folio(page_folio(page));
  109. }
  110. int try_to_release_page(struct page *page, gfp_t gfp)
  111. {
  112. return filemap_release_folio(page_folio(page), gfp);
  113. }
  114. EXPORT_SYMBOL(try_to_release_page);
  115. int isolate_lru_page(struct page *page)
  116. {
  117. if (WARN_RATELIMIT(PageTail(page), "trying to isolate tail page"))
  118. return -EBUSY;
  119. return folio_isolate_lru((struct folio *)page);
  120. }
  121. void putback_lru_page(struct page *page)
  122. {
  123. folio_putback_lru(page_folio(page));
  124. }