diff options
| -rw-r--r-- | mm/frontswap.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/mm/frontswap.c b/mm/frontswap.c index 7c26e899cec9..7fb9538bec23 100644 --- a/mm/frontswap.c +++ b/mm/frontswap.c | |||
| @@ -114,6 +114,12 @@ void __frontswap_init(unsigned type) | |||
| 114 | } | 114 | } |
| 115 | EXPORT_SYMBOL(__frontswap_init); | 115 | EXPORT_SYMBOL(__frontswap_init); |
| 116 | 116 | ||
| 117 | static inline void __frontswap_clear(struct swap_info_struct *sis, pgoff_t offset) | ||
| 118 | { | ||
| 119 | frontswap_clear(sis, offset); | ||
| 120 | atomic_dec(&sis->frontswap_pages); | ||
| 121 | } | ||
| 122 | |||
| 117 | /* | 123 | /* |
| 118 | * "Store" data from a page to frontswap and associate it with the page's | 124 | * "Store" data from a page to frontswap and associate it with the page's |
| 119 | * swaptype and offset. Page must be locked and in the swap cache. | 125 | * swaptype and offset. Page must be locked and in the swap cache. |
| @@ -145,10 +151,8 @@ int __frontswap_store(struct page *page) | |||
| 145 | the (older) page from frontswap | 151 | the (older) page from frontswap |
| 146 | */ | 152 | */ |
| 147 | inc_frontswap_failed_stores(); | 153 | inc_frontswap_failed_stores(); |
| 148 | if (dup) { | 154 | if (dup) |
| 149 | frontswap_clear(sis, offset); | 155 | __frontswap_clear(sis, offset); |
| 150 | atomic_dec(&sis->frontswap_pages); | ||
| 151 | } | ||
| 152 | } | 156 | } |
| 153 | if (frontswap_writethrough_enabled) | 157 | if (frontswap_writethrough_enabled) |
| 154 | /* report failure so swap also writes to swap device */ | 158 | /* report failure so swap also writes to swap device */ |
| @@ -191,8 +195,7 @@ void __frontswap_invalidate_page(unsigned type, pgoff_t offset) | |||
| 191 | BUG_ON(sis == NULL); | 195 | BUG_ON(sis == NULL); |
| 192 | if (frontswap_test(sis, offset)) { | 196 | if (frontswap_test(sis, offset)) { |
| 193 | frontswap_ops.invalidate_page(type, offset); | 197 | frontswap_ops.invalidate_page(type, offset); |
| 194 | atomic_dec(&sis->frontswap_pages); | 198 | __frontswap_clear(sis, offset); |
| 195 | frontswap_clear(sis, offset); | ||
| 196 | inc_frontswap_invalidates(); | 199 | inc_frontswap_invalidates(); |
| 197 | } | 200 | } |
| 198 | } | 201 | } |
