0001
0002
0003
0004
0005
0006
0007 #include <linux/migrate.h>
0008 #include <linux/pagemap.h>
0009 #include <linux/swap.h>
0010 #include "internal.h"
0011
0012 struct address_space *page_mapping(struct page *page)
0013 {
0014 return folio_mapping(page_folio(page));
0015 }
0016 EXPORT_SYMBOL(page_mapping);
0017
0018 void unlock_page(struct page *page)
0019 {
0020 return folio_unlock(page_folio(page));
0021 }
0022 EXPORT_SYMBOL(unlock_page);
0023
0024 void end_page_writeback(struct page *page)
0025 {
0026 return folio_end_writeback(page_folio(page));
0027 }
0028 EXPORT_SYMBOL(end_page_writeback);
0029
0030 void wait_on_page_writeback(struct page *page)
0031 {
0032 return folio_wait_writeback(page_folio(page));
0033 }
0034 EXPORT_SYMBOL_GPL(wait_on_page_writeback);
0035
0036 void wait_for_stable_page(struct page *page)
0037 {
0038 return folio_wait_stable(page_folio(page));
0039 }
0040 EXPORT_SYMBOL_GPL(wait_for_stable_page);
0041
0042 bool page_mapped(struct page *page)
0043 {
0044 return folio_mapped(page_folio(page));
0045 }
0046 EXPORT_SYMBOL(page_mapped);
0047
0048 void mark_page_accessed(struct page *page)
0049 {
0050 folio_mark_accessed(page_folio(page));
0051 }
0052 EXPORT_SYMBOL(mark_page_accessed);
0053
0054 bool set_page_writeback(struct page *page)
0055 {
0056 return folio_start_writeback(page_folio(page));
0057 }
0058 EXPORT_SYMBOL(set_page_writeback);
0059
0060 bool set_page_dirty(struct page *page)
0061 {
0062 return folio_mark_dirty(page_folio(page));
0063 }
0064 EXPORT_SYMBOL(set_page_dirty);
0065
0066 int __set_page_dirty_nobuffers(struct page *page)
0067 {
0068 return filemap_dirty_folio(page_mapping(page), page_folio(page));
0069 }
0070 EXPORT_SYMBOL(__set_page_dirty_nobuffers);
0071
0072 bool clear_page_dirty_for_io(struct page *page)
0073 {
0074 return folio_clear_dirty_for_io(page_folio(page));
0075 }
0076 EXPORT_SYMBOL(clear_page_dirty_for_io);
0077
0078 bool redirty_page_for_writepage(struct writeback_control *wbc,
0079 struct page *page)
0080 {
0081 return folio_redirty_for_writepage(wbc, page_folio(page));
0082 }
0083 EXPORT_SYMBOL(redirty_page_for_writepage);
0084
0085 void lru_cache_add(struct page *page)
0086 {
0087 folio_add_lru(page_folio(page));
0088 }
0089 EXPORT_SYMBOL(lru_cache_add);
0090
0091 int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
0092 pgoff_t index, gfp_t gfp)
0093 {
0094 return filemap_add_folio(mapping, page_folio(page), index, gfp);
0095 }
0096 EXPORT_SYMBOL(add_to_page_cache_lru);
0097
0098 noinline
0099 struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index,
0100 int fgp_flags, gfp_t gfp)
0101 {
0102 struct folio *folio;
0103
0104 folio = __filemap_get_folio(mapping, index, fgp_flags, gfp);
0105 if ((fgp_flags & FGP_HEAD) || !folio || xa_is_value(folio))
0106 return &folio->page;
0107 return folio_file_page(folio, index);
0108 }
0109 EXPORT_SYMBOL(pagecache_get_page);
0110
0111 struct page *grab_cache_page_write_begin(struct address_space *mapping,
0112 pgoff_t index)
0113 {
0114 unsigned fgp_flags = FGP_LOCK | FGP_WRITE | FGP_CREAT | FGP_STABLE;
0115
0116 return pagecache_get_page(mapping, index, fgp_flags,
0117 mapping_gfp_mask(mapping));
0118 }
0119 EXPORT_SYMBOL(grab_cache_page_write_begin);
0120
0121 void delete_from_page_cache(struct page *page)
0122 {
0123 return filemap_remove_folio(page_folio(page));
0124 }
0125
0126 int try_to_release_page(struct page *page, gfp_t gfp)
0127 {
0128 return filemap_release_folio(page_folio(page), gfp);
0129 }
0130 EXPORT_SYMBOL(try_to_release_page);
0131
0132 int isolate_lru_page(struct page *page)
0133 {
0134 if (WARN_RATELIMIT(PageTail(page), "trying to isolate tail page"))
0135 return -EBUSY;
0136 return folio_isolate_lru((struct folio *)page);
0137 }
0138
0139 void putback_lru_page(struct page *page)
0140 {
0141 folio_putback_lru(page_folio(page));
0142 }