]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/frontswap.h
Merge tag 'nfsd-4.8' of git://linux-nfs.org/~bfields/linux
[karo-tx-linux.git] / include / linux / frontswap.h
index e65ef959546cd8f35ec4a3a78e4d97d822781f04..c46d2aa16d81221c240ec46cf5c7fec6dbfe4bdd 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/swap.h>
 #include <linux/mm.h>
 #include <linux/bitops.h>
+#include <linux/jump_label.h>
 
 struct frontswap_ops {
        void (*init)(unsigned); /* this swap type was just swapon'ed */
@@ -14,7 +15,6 @@ struct frontswap_ops {
        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);
@@ -30,7 +30,12 @@ extern void __frontswap_invalidate_page(unsigned, pgoff_t);
 extern void __frontswap_invalidate_area(unsigned);
 
 #ifdef CONFIG_FRONTSWAP
-#define frontswap_enabled (1)
+extern struct static_key_false frontswap_enabled_key;
+
+static inline bool frontswap_enabled(void)
+{
+       return static_branch_unlikely(&frontswap_enabled_key);
+}
 
 static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset)
 {
@@ -50,7 +55,10 @@ static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
 #else
 /* all inline routines become no-ops and all externs are ignored */
 
-#define frontswap_enabled (0)
+static inline bool frontswap_enabled(void)
+{
+       return false;
+}
 
 static inline bool frontswap_test(struct swap_info_struct *sis, pgoff_t offset)
 {
@@ -70,37 +78,35 @@ static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
 
 static inline int frontswap_store(struct page *page)
 {
-       int ret = -1;
+       if (frontswap_enabled())
+               return __frontswap_store(page);
 
-       if (frontswap_enabled)
-               ret = __frontswap_store(page);
-       return ret;
+       return -1;
 }
 
 static inline int frontswap_load(struct page *page)
 {
-       int ret = -1;
+       if (frontswap_enabled())
+               return __frontswap_load(page);
 
-       if (frontswap_enabled)
-               ret = __frontswap_load(page);
-       return ret;
+       return -1;
 }
 
 static inline void frontswap_invalidate_page(unsigned type, pgoff_t offset)
 {
-       if (frontswap_enabled)
+       if (frontswap_enabled())
                __frontswap_invalidate_page(type, offset);
 }
 
 static inline void frontswap_invalidate_area(unsigned type)
 {
-       if (frontswap_enabled)
+       if (frontswap_enabled())
                __frontswap_invalidate_area(type);
 }
 
 static inline void frontswap_init(unsigned type, unsigned long *map)
 {
-       if (frontswap_enabled)
+       if (frontswap_enabled())
                __frontswap_init(type, map);
 }