mm/swap_slots.c: remove redundant check for swap_slot_cache_initialized
[linux-2.6-microblaze.git] / mm / swap_slots.c
index 0975adc..3e64535 100644 (file)
@@ -46,8 +46,7 @@ static void __drain_swap_slots_cache(unsigned int type);
 static void deactivate_swap_slots_cache(void);
 static void reactivate_swap_slots_cache(void);
 
-#define use_swap_slot_cache (swap_slot_cache_active && \
-               swap_slot_cache_enabled && swap_slot_cache_initialized)
+#define use_swap_slot_cache (swap_slot_cache_active && swap_slot_cache_enabled)
 #define SLOTS_CACHE 0x1
 #define SLOTS_CACHE_RET 0x2
 
@@ -94,7 +93,7 @@ static bool check_cache_active(void)
 {
        long pages;
 
-       if (!swap_slot_cache_enabled || !swap_slot_cache_initialized)
+       if (!swap_slot_cache_enabled)
                return false;
 
        pages = get_nr_swap_pages();
@@ -136,9 +135,16 @@ static int alloc_swap_slot_cache(unsigned int cpu)
 
        mutex_lock(&swap_slots_cache_mutex);
        cache = &per_cpu(swp_slots, cpu);
-       if (cache->slots || cache->slots_ret)
+       if (cache->slots || cache->slots_ret) {
                /* cache already allocated */
-               goto out;
+               mutex_unlock(&swap_slots_cache_mutex);
+
+               kvfree(slots);
+               kvfree(slots_ret);
+
+               return 0;
+       }
+
        if (!cache->lock_initialized) {
                mutex_init(&cache->alloc_lock);
                spin_lock_init(&cache->free_lock);
@@ -155,15 +161,8 @@ static int alloc_swap_slot_cache(unsigned int cpu)
         */
        mb();
        cache->slots = slots;
-       slots = NULL;
        cache->slots_ret = slots_ret;
-       slots_ret = NULL;
-out:
        mutex_unlock(&swap_slots_cache_mutex);
-       if (slots)
-               kvfree(slots);
-       if (slots_ret)
-               kvfree(slots_ret);
        return 0;
 }
 
@@ -240,21 +239,19 @@ static int free_slot_cache(unsigned int cpu)
 
 int enable_swap_slots_cache(void)
 {
-       int ret = 0;
-
        mutex_lock(&swap_slots_cache_enable_mutex);
-       if (swap_slot_cache_initialized) {
-               __reenable_swap_slots_cache();
-               goto out_unlock;
-       }
+       if (!swap_slot_cache_initialized) {
+               int ret;
 
-       ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "swap_slots_cache",
-                               alloc_swap_slot_cache, free_slot_cache);
-       if (WARN_ONCE(ret < 0, "Cache allocation failed (%s), operating "
-                              "without swap slots cache.\n", __func__))
-               goto out_unlock;
+               ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "swap_slots_cache",
+                                       alloc_swap_slot_cache, free_slot_cache);
+               if (WARN_ONCE(ret < 0, "Cache allocation failed (%s), operating "
+                                      "without swap slots cache.\n", __func__))
+                       goto out_unlock;
+
+               swap_slot_cache_initialized = true;
+       }
 
-       swap_slot_cache_initialized = true;
        __reenable_swap_slots_cache();
 out_unlock:
        mutex_unlock(&swap_slots_cache_enable_mutex);