|
@@ -1123,16 +1123,13 @@ static struct swap_info_struct *swap_info_get_cont(swp_entry_t entry,
|
|
|
return p;
|
|
|
}
|
|
|
|
|
|
-static unsigned char __swap_entry_free(struct swap_info_struct *p,
|
|
|
- swp_entry_t entry, unsigned char usage)
|
|
|
+static unsigned char __swap_entry_free_locked(struct swap_info_struct *p,
|
|
|
+ unsigned long offset,
|
|
|
+ unsigned char usage)
|
|
|
{
|
|
|
- struct swap_cluster_info *ci;
|
|
|
- unsigned long offset = swp_offset(entry);
|
|
|
unsigned char count;
|
|
|
unsigned char has_cache;
|
|
|
|
|
|
- ci = lock_cluster_or_swap_info(p, offset);
|
|
|
-
|
|
|
count = p->swap_map[offset];
|
|
|
|
|
|
has_cache = count & SWAP_HAS_CACHE;
|
|
@@ -1160,6 +1157,17 @@ static unsigned char __swap_entry_free(struct swap_info_struct *p,
|
|
|
usage = count | has_cache;
|
|
|
p->swap_map[offset] = usage ? : SWAP_HAS_CACHE;
|
|
|
|
|
|
+ return usage;
|
|
|
+}
|
|
|
+
|
|
|
+static unsigned char __swap_entry_free(struct swap_info_struct *p,
|
|
|
+ swp_entry_t entry, unsigned char usage)
|
|
|
+{
|
|
|
+ struct swap_cluster_info *ci;
|
|
|
+ unsigned long offset = swp_offset(entry);
|
|
|
+
|
|
|
+ ci = lock_cluster_or_swap_info(p, offset);
|
|
|
+ usage = __swap_entry_free_locked(p, offset, usage);
|
|
|
unlock_cluster_or_swap_info(p, ci);
|
|
|
|
|
|
return usage;
|