patch-2.4.6 linux/mm/swap_state.c
Next file: linux/mm/swapfile.c
Previous file: linux/mm/page_alloc.c
Back to the patch index
Back to the overall index
- Lines: 31
- Date:
Mon Jun 11 19:15:27 2001
- Orig file:
v2.4.5/linux/mm/swap_state.c
- Orig date:
Thu May 24 15:20:18 2001
diff -u --recursive --new-file v2.4.5/linux/mm/swap_state.c linux/mm/swap_state.c
@@ -145,6 +145,30 @@
UnlockPage(page);
}
+/*
+ * Perform a free_page(), also freeing any swap cache associated with
+ * this page if it is the last user of the page. Can not do a lock_page,
+ * as we are holding the page_table_lock spinlock.
+ */
+void free_page_and_swap_cache(struct page *page)
+{
+ /*
+ * If we are the only user, then try to free up the swap cache.
+ *
+ * Its ok to check for PageSwapCache without the page lock
+ * here because we are going to recheck again inside
+ * exclusive_swap_page() _with_ the lock.
+ * - Marcelo
+ */
+ if (PageSwapCache(page) && !TryLockPage(page)) {
+ if (exclusive_swap_page(page))
+ delete_from_swap_cache_nolock(page);
+ UnlockPage(page);
+ }
+ page_cache_release(page);
+}
+
+
/*
* Lookup a swap entry in the swap cache. A found page will be returned
* unlocked and with its refcount incremented - we rely on the kernel
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)