~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/mm/swap.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _MM_SWAP_H
  3 #define _MM_SWAP_H
  4 
  5 struct mempolicy;
  6 
  7 #ifdef CONFIG_SWAP
  8 #include <linux/swapops.h> /* for swp_offset */
  9 #include <linux/blk_types.h> /* for bio_end_io_t */
 10 
 11 /* linux/mm/page_io.c */
 12 int sio_pool_init(void);
 13 struct swap_iocb;
 14 void swap_read_folio(struct folio *folio, struct swap_iocb **plug);
 15 void __swap_read_unplug(struct swap_iocb *plug);
 16 static inline void swap_read_unplug(struct swap_iocb *plug)
 17 {
 18         if (unlikely(plug))
 19                 __swap_read_unplug(plug);
 20 }
 21 void swap_write_unplug(struct swap_iocb *sio);
 22 int swap_writepage(struct page *page, struct writeback_control *wbc);
 23 void __swap_writepage(struct folio *folio, struct writeback_control *wbc);
 24 
 25 /* linux/mm/swap_state.c */
 26 /* One swap address space for each 64M swap space */
 27 #define SWAP_ADDRESS_SPACE_SHIFT        14
 28 #define SWAP_ADDRESS_SPACE_PAGES        (1 << SWAP_ADDRESS_SPACE_SHIFT)
 29 #define SWAP_ADDRESS_SPACE_MASK         (SWAP_ADDRESS_SPACE_PAGES - 1)
 30 extern struct address_space *swapper_spaces[];
 31 #define swap_address_space(entry)                           \
 32         (&swapper_spaces[swp_type(entry)][swp_offset(entry) \
 33                 >> SWAP_ADDRESS_SPACE_SHIFT])
 34 
 35 /*
 36  * Return the swap device position of the swap entry.
 37  */
 38 static inline loff_t swap_dev_pos(swp_entry_t entry)
 39 {
 40         return ((loff_t)swp_offset(entry)) << PAGE_SHIFT;
 41 }
 42 
 43 /*
 44  * Return the swap cache index of the swap entry.
 45  */
 46 static inline pgoff_t swap_cache_index(swp_entry_t entry)
 47 {
 48         BUILD_BUG_ON((SWP_OFFSET_MASK | SWAP_ADDRESS_SPACE_MASK) != SWP_OFFSET_MASK);
 49         return swp_offset(entry) & SWAP_ADDRESS_SPACE_MASK;
 50 }
 51 
 52 void show_swap_cache_info(void);
 53 bool add_to_swap(struct folio *folio);
 54 void *get_shadow_from_swap_cache(swp_entry_t entry);
 55 int add_to_swap_cache(struct folio *folio, swp_entry_t entry,
 56                       gfp_t gfp, void **shadowp);
 57 void __delete_from_swap_cache(struct folio *folio,
 58                               swp_entry_t entry, void *shadow);
 59 void delete_from_swap_cache(struct folio *folio);
 60 void clear_shadow_from_swap_cache(int type, unsigned long begin,
 61                                   unsigned long end);
 62 void swapcache_clear(struct swap_info_struct *si, swp_entry_t entry);
 63 struct folio *swap_cache_get_folio(swp_entry_t entry,
 64                 struct vm_area_struct *vma, unsigned long addr);
 65 struct folio *filemap_get_incore_folio(struct address_space *mapping,
 66                 pgoff_t index);
 67 
 68 struct folio *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
 69                 struct vm_area_struct *vma, unsigned long addr,
 70                 struct swap_iocb **plug);
 71 struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_flags,
 72                 struct mempolicy *mpol, pgoff_t ilx, bool *new_page_allocated,
 73                 bool skip_if_exists);
 74 struct folio *swap_cluster_readahead(swp_entry_t entry, gfp_t flag,
 75                 struct mempolicy *mpol, pgoff_t ilx);
 76 struct page *swapin_readahead(swp_entry_t entry, gfp_t flag,
 77                               struct vm_fault *vmf);
 78 
 79 static inline unsigned int folio_swap_flags(struct folio *folio)
 80 {
 81         return swp_swap_info(folio->swap)->flags;
 82 }
 83 #else /* CONFIG_SWAP */
 84 struct swap_iocb;
 85 static inline void swap_read_folio(struct folio *folio, struct swap_iocb **plug)
 86 {
 87 }
 88 static inline void swap_write_unplug(struct swap_iocb *sio)
 89 {
 90 }
 91 
 92 static inline struct address_space *swap_address_space(swp_entry_t entry)
 93 {
 94         return NULL;
 95 }
 96 
 97 static inline pgoff_t swap_cache_index(swp_entry_t entry)
 98 {
 99         return 0;
100 }
101 
102 static inline void show_swap_cache_info(void)
103 {
104 }
105 
106 static inline struct folio *swap_cluster_readahead(swp_entry_t entry,
107                         gfp_t gfp_mask, struct mempolicy *mpol, pgoff_t ilx)
108 {
109         return NULL;
110 }
111 
112 static inline struct page *swapin_readahead(swp_entry_t swp, gfp_t gfp_mask,
113                         struct vm_fault *vmf)
114 {
115         return NULL;
116 }
117 
118 static inline int swap_writepage(struct page *p, struct writeback_control *wbc)
119 {
120         return 0;
121 }
122 
123 static inline void swapcache_clear(struct swap_info_struct *si, swp_entry_t entry)
124 {
125 }
126 
127 static inline struct folio *swap_cache_get_folio(swp_entry_t entry,
128                 struct vm_area_struct *vma, unsigned long addr)
129 {
130         return NULL;
131 }
132 
133 static inline
134 struct folio *filemap_get_incore_folio(struct address_space *mapping,
135                 pgoff_t index)
136 {
137         return filemap_get_folio(mapping, index);
138 }
139 
140 static inline bool add_to_swap(struct folio *folio)
141 {
142         return false;
143 }
144 
145 static inline void *get_shadow_from_swap_cache(swp_entry_t entry)
146 {
147         return NULL;
148 }
149 
150 static inline int add_to_swap_cache(struct folio *folio, swp_entry_t entry,
151                                         gfp_t gfp_mask, void **shadowp)
152 {
153         return -1;
154 }
155 
156 static inline void __delete_from_swap_cache(struct folio *folio,
157                                         swp_entry_t entry, void *shadow)
158 {
159 }
160 
161 static inline void delete_from_swap_cache(struct folio *folio)
162 {
163 }
164 
165 static inline void clear_shadow_from_swap_cache(int type, unsigned long begin,
166                                 unsigned long end)
167 {
168 }
169 
170 static inline unsigned int folio_swap_flags(struct folio *folio)
171 {
172         return 0;
173 }
174 #endif /* CONFIG_SWAP */
175 #endif /* _MM_SWAP_H */
176 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php