#define CLUSTER_FLAG_FREE 1 /* This cluster is free */
 #define CLUSTER_FLAG_NONFULL 2 /* This cluster is on nonfull list */
 #define CLUSTER_FLAG_FRAG 4 /* This cluster is on nonfull list */
+#define CLUSTER_FLAG_FULL 8 /* This cluster is on full list */
 
 /*
  * The first page in the swap file is the swap header, which is always marked
 
        lockdep_assert_held(&si->lock);
        lockdep_assert_held(&ci->lock);
 
-       list_move_tail(&ci->list, &si->free_clusters);
+       if (ci->flags)
+               list_move_tail(&ci->list, &si->free_clusters);
+       else
+               list_add_tail(&ci->list, &si->free_clusters);
        ci->flags = CLUSTER_FLAG_FREE;
        ci->order = 0;
 }
                                SWAPFILE_CLUSTER);
 
                spin_lock(&si->lock);
-
                spin_lock(&ci->lock);
                __free_cluster(si, ci);
                memset(si->swap_map + idx * SWAPFILE_CLUSTER,
                if (ci->flags & CLUSTER_FLAG_FRAG)
                        si->frag_cluster_nr[ci->order]--;
                list_move_tail(&ci->list, &si->full_clusters);
-               ci->flags = 0;
+               ci->flags = CLUSTER_FLAG_FULL;
        }
 }