123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #ifndef _LINUX_FRONTSWAP_H
- #define _LINUX_FRONTSWAP_H
- #include <linux/swap.h>
- #include <linux/mm.h>
- #include <linux/bitops.h>
- struct frontswap_ops {
- void (*init)(unsigned); /* this swap type was just swapon'ed */
- int (*store)(unsigned, pgoff_t, struct page *); /* store a page */
- int (*load)(unsigned, pgoff_t, struct page *); /* load a page */
- void (*invalidate_page)(unsigned, pgoff_t); /* page no longer needed */
- void (*invalidate_area)(unsigned); /* swap type just swapoff'ed */
- struct frontswap_ops *next; /* private pointer to next ops */
- };
- extern bool frontswap_enabled;
- extern void frontswap_register_ops(struct frontswap_ops *ops);
- extern void frontswap_shrink(unsigned long);
- extern unsigned long frontswap_curr_pages(void);
- extern void frontswap_writethrough(bool);
- #define FRONTSWAP_HAS_EXCLUSIVE_GETS
- extern void frontswap_tmem_exclusive_gets(bool);
- extern bool __frontswap_test(struct swap_info_struct *, pgoff_t);
- extern void __frontswap_init(unsigned type, unsigned long *map);
- extern int __frontswap_store(struct page *page);
- extern int __frontswap_load(struct page *page);
- extern void __frontswap_invalidate_page(unsigned, pgoff_t);
- extern void __frontswap_invalidate_area(unsigned);
- #ifdef CONFIG_FRONTSWAP
- #define frontswap_enabled (1)
- static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset)
- {
- return __frontswap_test(sis, offset);
- }
- static inline void frontswap_map_set(struct swap_info_struct *p,
- unsigned long *map)
- {
- p->frontswap_map = map;
- }
- static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
- {
- return p->frontswap_map;
- }
- #else
- /* all inline routines become no-ops and all externs are ignored */
- #define frontswap_enabled (0)
- static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset)
- {
- return false;
- }
- static inline void frontswap_map_set(struct swap_info_struct *p,
- unsigned long *map)
- {
- }
- static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
- {
- return NULL;
- }
- #endif
- static inline int frontswap_store(struct page *page)
- {
- int ret = -1;
- if (frontswap_enabled)
- ret = __frontswap_store(page);
- return ret;
- }
- static inline int frontswap_load(struct page *page)
- {
- int ret = -1;
- if (frontswap_enabled)
- ret = __frontswap_load(page);
- return ret;
- }
- static inline void frontswap_invalidate_page(unsigned type, pgoff_t offset)
- {
- if (frontswap_enabled)
- __frontswap_invalidate_page(type, offset);
- }
- static inline void frontswap_invalidate_area(unsigned type)
- {
- if (frontswap_enabled)
- __frontswap_invalidate_area(type);
- }
- static inline void frontswap_init(unsigned type, unsigned long *map)
- {
- if (frontswap_enabled)
- __frontswap_init(type, map);
- }
- #endif /* _LINUX_FRONTSWAP_H */
|