patch-2.4.10 linux/include/linux/swap.h

Next file: linux/include/linux/swapctl.h
Previous file: linux/include/linux/sunrpc/xprt.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.9/linux/include/linux/swap.h linux/include/linux/swap.h
@@ -8,7 +8,7 @@
 #define SWAP_FLAG_PRIO_MASK	0x7fff
 #define SWAP_FLAG_PRIO_SHIFT	0
 
-#define MAX_SWAPFILES 8
+#define MAX_SWAPFILES 32
 
 /*
  * Magic header for a swap area. The first part of the union is
@@ -80,12 +80,10 @@
 
 extern int nr_swap_pages;
 extern unsigned int nr_free_pages(void);
-extern unsigned int nr_inactive_clean_pages(void);
 extern unsigned int nr_free_buffer_pages(void);
 extern int nr_active_pages;
-extern int nr_inactive_dirty_pages;
+extern int nr_inactive_pages;
 extern atomic_t nr_async_pages;
-extern struct address_space swapper_space;
 extern atomic_t page_cache_size;
 extern atomic_t buffermem_pages;
 extern spinlock_t pagecache_lock;
@@ -99,26 +97,20 @@
 struct zone_t;
 
 /* linux/mm/swap.c */
-extern int memory_pressure;
-extern void deactivate_page(struct page *);
-extern void deactivate_page_nolock(struct page *);
-extern void activate_page(struct page *);
-extern void activate_page_nolock(struct page *);
-extern void lru_cache_add(struct page *);
-extern void __lru_cache_del(struct page *);
-extern void lru_cache_del(struct page *);
-extern void recalculate_vm_stats(void);
+extern void FASTCALL(lru_cache_add(struct page *));
+extern void FASTCALL(__lru_cache_del(struct page *));
+extern void FASTCALL(lru_cache_del(struct page *));
+
+extern void FASTCALL(deactivate_page(struct page *));
+extern void FASTCALL(deactivate_page_nolock(struct page *));
+extern void FASTCALL(activate_page(struct page *));
+extern void FASTCALL(activate_page_nolock(struct page *));
+
 extern void swap_setup(void);
 
 /* linux/mm/vmscan.c */
-extern struct page * reclaim_page(zone_t *);
 extern wait_queue_head_t kswapd_wait;
-extern wait_queue_head_t kreclaimd_wait;
-extern int page_launder(int, int);
-extern int free_shortage(void);
-extern int inactive_shortage(void);
-extern void wakeup_kswapd(void);
-extern int try_to_free_pages(unsigned int gfp_mask);
+extern int FASTCALL(try_to_free_pages(zone_t *, unsigned int, unsigned int));
 
 /* linux/mm/page_io.c */
 extern void rw_swap_page(int, struct page *);
@@ -129,37 +121,27 @@
 /* linux/mm/swap_state.c */
 extern void show_swap_cache_info(void);
 extern void add_to_swap_cache(struct page *, swp_entry_t);
-extern int swap_check_entry(unsigned long);
+extern void __delete_from_swap_cache(struct page *page);
+extern void delete_from_swap_cache(struct page *page);
+extern void free_page_and_swap_cache(struct page *page);
 extern struct page * lookup_swap_cache(swp_entry_t);
 extern struct page * read_swap_cache_async(swp_entry_t);
 
 /* linux/mm/oom_kill.c */
-extern int out_of_memory(void);
 extern void oom_kill(void);
 
-/*
- * Make these inline later once they are working properly.
- */
-extern void __delete_from_swap_cache(struct page *page);
-extern void delete_from_swap_cache(struct page *page);
-extern void delete_from_swap_cache_nolock(struct page *page);
-extern void free_page_and_swap_cache(struct page *page);
-
 /* linux/mm/swapfile.c */
-extern int vm_swap_full(void);
 extern unsigned int nr_swapfiles;
 extern struct swap_info_struct swap_info[];
 extern int is_swap_partition(kdev_t);
 extern void si_swapinfo(struct sysinfo *);
-extern swp_entry_t __get_swap_page(unsigned short);
+extern swp_entry_t get_swap_page(void);
 extern void get_swaphandle_info(swp_entry_t, unsigned long *, kdev_t *, 
 					struct inode **);
 extern int swap_duplicate(swp_entry_t);
 extern int swap_count(struct page *);
 extern int valid_swaphandles(swp_entry_t, unsigned long *);
-#define get_swap_page() __get_swap_page(1)
-extern void __swap_free(swp_entry_t, unsigned short);
-#define swap_free(entry) __swap_free((entry), 1)
+extern void swap_free(swp_entry_t);
 struct swap_list_t {
 	int head;	/* head of priority-ordered swapfile list */
 	int next;	/* swapfile to be used next */
@@ -179,86 +161,53 @@
 
 extern spinlock_t pagemap_lru_lock;
 
-/*
- * Page aging defines.
- * Since we do exponential decay of the page age, we
- * can chose a fairly large maximum.
- */
-#define PAGE_AGE_START 2
-#define PAGE_AGE_ADV 3
-#define PAGE_AGE_MAX 64
+extern void FASTCALL(mark_page_accessed(struct page *));
 
 /*
  * List add/del helper macros. These must be called
  * with the pagemap_lru_lock held!
  */
-#define DEBUG_ADD_PAGE \
-	if (PageActive(page) || PageInactiveDirty(page) || \
-					PageInactiveClean(page)) BUG();
-
-#define ZERO_PAGE_BUG \
-	if (page_count(page) == 0) BUG();
-
-#define add_page_to_active_list(page) { \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-	SetPageActive(page); \
-	list_add(&(page)->lru, &active_list); \
-	nr_active_pages++; \
-}
-
-#define add_page_to_inactive_dirty_list(page) { \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-	SetPageInactiveDirty(page); \
-	list_add(&(page)->lru, &inactive_dirty_list); \
-	nr_inactive_dirty_pages++; \
-	page->zone->inactive_dirty_pages++; \
-}
-
-#define add_page_to_inactive_clean_list(page) { \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-	SetPageInactiveClean(page); \
-	list_add(&(page)->lru, &page->zone->inactive_clean_list); \
-	page->zone->inactive_clean_pages++; \
-}
-
-#define del_page_from_active_list(page) { \
-	list_del(&(page)->lru); \
-	ClearPageActive(page); \
-	nr_active_pages--; \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-}
-
-#define del_page_from_inactive_dirty_list(page) { \
-	list_del(&(page)->lru); \
-	ClearPageInactiveDirty(page); \
-	nr_inactive_dirty_pages--; \
-	page->zone->inactive_dirty_pages--; \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-}
-
-#define del_page_from_inactive_clean_list(page) { \
-	list_del(&(page)->lru); \
-	ClearPageInactiveClean(page); \
-	page->zone->inactive_clean_pages--; \
-	DEBUG_ADD_PAGE \
-	ZERO_PAGE_BUG \
-}
-
-/*
- * In mm/swap.c::recalculate_vm_stats(), we substract
- * inactive_target from memory_pressure every second.
- * This means that memory_pressure is smoothed over
- * 64 (1 << INACTIVE_SHIFT) seconds.
- */
-#define INACTIVE_SHIFT 6
-#define inactive_target min(unsigned long, \
-			    (memory_pressure >> INACTIVE_SHIFT), \
-			    (num_physpages / 4))
+#define DEBUG_LRU_PAGE(page)			\
+do {						\
+	if (PageActive(page))			\
+		BUG();				\
+	if (PageInactive(page))			\
+		BUG();				\
+	if (page_count(page) == 0)		\
+		BUG();				\
+} while (0)
+
+#define add_page_to_active_list(page)		\
+do {						\
+	DEBUG_LRU_PAGE(page);			\
+	SetPageActive(page);			\
+	list_add(&(page)->lru, &active_list);	\
+	nr_active_pages++;			\
+} while (0)
+
+#define add_page_to_inactive_list(page)		\
+do {						\
+	DEBUG_LRU_PAGE(page);			\
+	SetPageInactive(page);		\
+	list_add(&(page)->lru, &inactive_list);	\
+	nr_inactive_pages++;			\
+} while (0)
+
+#define del_page_from_active_list(page)		\
+do {						\
+	list_del(&(page)->lru);			\
+	ClearPageActive(page);			\
+	nr_active_pages--;			\
+	DEBUG_LRU_PAGE(page);			\
+} while (0)
+
+#define del_page_from_inactive_list(page)	\
+do {						\
+	list_del(&(page)->lru);			\
+	ClearPageInactive(page);		\
+	nr_inactive_pages--;			\
+	DEBUG_LRU_PAGE(page);			\
+} while (0)
 
 /*
  * Ugly ugly ugly HACK to make sure the inactive lists
@@ -273,9 +222,6 @@
 #ifndef _LINUX_MAJOR_H
 #include <linux/major.h>
 #endif
-
-#define page_ramdisk(page) \
-	(page->buffers && (MAJOR(page->buffers->b_dev) == RAMDISK_MAJOR))
 
 extern spinlock_t swaplock;
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)