1 /* SPDX-License-Identifier: GPL-2.0 */
8 #include <linux/swapops.h> /* for swp_offset */
9 #include <linux/blk_types.h> /* for bio_end_io_t */
11 /* linux/mm/page_io.c */
12 int sio_pool_init(void);
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
)
19 __swap_read_unplug(plug
);
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
);
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])
36 * Return the swap device position of the swap entry.
38 static inline loff_t
swap_dev_pos(swp_entry_t entry
)
40 return ((loff_t
)swp_offset(entry
)) << PAGE_SHIFT
;
44 * Return the swap cache index of the swap entry.
46 static inline pgoff_t
swap_cache_index(swp_entry_t entry
)
48 BUILD_BUG_ON((SWP_OFFSET_MASK
| SWAP_ADDRESS_SPACE_MASK
) != SWP_OFFSET_MASK
);
49 return swp_offset(entry
) & SWAP_ADDRESS_SPACE_MASK
;
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
,
62 void swapcache_clear(struct swap_info_struct
*si
, swp_entry_t entry
, int nr
);
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
,
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
,
74 struct folio
*swap_cluster_readahead(swp_entry_t entry
, gfp_t flag
,
75 struct mempolicy
*mpol
, pgoff_t ilx
);
76 struct folio
*swapin_readahead(swp_entry_t entry
, gfp_t flag
,
77 struct vm_fault
*vmf
);
79 static inline unsigned int folio_swap_flags(struct folio
*folio
)
81 return swp_swap_info(folio
->swap
)->flags
;
85 * Return the count of contiguous swap entries that share the same
86 * zeromap status as the starting entry. If is_zeromap is not NULL,
87 * it will return the zeromap status of the starting entry.
89 static inline int swap_zeromap_batch(swp_entry_t entry
, int max_nr
,
92 struct swap_info_struct
*sis
= swp_swap_info(entry
);
93 unsigned long start
= swp_offset(entry
);
94 unsigned long end
= start
+ max_nr
;
97 first_bit
= test_bit(start
, sis
->zeromap
);
99 *is_zeromap
= first_bit
;
104 return find_next_zero_bit(sis
->zeromap
, end
, start
) - start
;
106 return find_next_bit(sis
->zeromap
, end
, start
) - start
;
109 #else /* CONFIG_SWAP */
111 static inline void swap_read_folio(struct folio
*folio
, struct swap_iocb
**plug
)
114 static inline void swap_write_unplug(struct swap_iocb
*sio
)
118 static inline struct address_space
*swap_address_space(swp_entry_t entry
)
123 static inline pgoff_t
swap_cache_index(swp_entry_t entry
)
128 static inline void show_swap_cache_info(void)
132 static inline struct folio
*swap_cluster_readahead(swp_entry_t entry
,
133 gfp_t gfp_mask
, struct mempolicy
*mpol
, pgoff_t ilx
)
138 static inline struct folio
*swapin_readahead(swp_entry_t swp
, gfp_t gfp_mask
,
139 struct vm_fault
*vmf
)
144 static inline int swap_writepage(struct page
*p
, struct writeback_control
*wbc
)
149 static inline void swapcache_clear(struct swap_info_struct
*si
, swp_entry_t entry
, int nr
)
153 static inline struct folio
*swap_cache_get_folio(swp_entry_t entry
,
154 struct vm_area_struct
*vma
, unsigned long addr
)
160 struct folio
*filemap_get_incore_folio(struct address_space
*mapping
,
163 return filemap_get_folio(mapping
, index
);
166 static inline bool add_to_swap(struct folio
*folio
)
171 static inline void *get_shadow_from_swap_cache(swp_entry_t entry
)
176 static inline int add_to_swap_cache(struct folio
*folio
, swp_entry_t entry
,
177 gfp_t gfp_mask
, void **shadowp
)
182 static inline void __delete_from_swap_cache(struct folio
*folio
,
183 swp_entry_t entry
, void *shadow
)
187 static inline void delete_from_swap_cache(struct folio
*folio
)
191 static inline void clear_shadow_from_swap_cache(int type
, unsigned long begin
,
196 static inline unsigned int folio_swap_flags(struct folio
*folio
)
201 static inline int swap_zeromap_batch(swp_entry_t entry
, int max_nr
,
207 #endif /* CONFIG_SWAP */
209 #endif /* _MM_SWAP_H */