Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Compatibility functions which bloat the callers too much to make inline.
0003  * All of the callers of these functions should be converted to use folios
0004  * eventually.
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 }