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
- Lines: 242
- Date:
Sun Sep 23 10:31:02 2001
- Orig file:
v2.4.9/linux/include/linux/swap.h
- Orig date:
Mon Aug 27 12:41:48 2001
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)