diff options
Diffstat (limited to 'include/linux/swap.h')
-rw-r--r-- | include/linux/swap.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/include/linux/swap.h b/include/linux/swap.h index 7ba7dccaf0e7..a93eb9262eb6 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -151,11 +151,13 @@ enum { SWP_AREA_DISCARD = (1 << 8), /* single-time swap area discards */ SWP_PAGE_DISCARD = (1 << 9), /* freed swap page-cluster discards */ /* add others here before... */ - SWP_SCANNING = (1 << 10), /* refcount in scan_swap_map */ + SWP_FAST = (1 << 10), /* blkdev access is fast and cheap */ + SWP_SCANNING = (1 << 11), /* refcount in scan_swap_map */ }; #define SWAP_CLUSTER_MAX 32UL #define COMPACT_CLUSTER_MAX SWAP_CLUSTER_MAX +#define SWAPFILE_CLUSTER 256 /* * Ratio between zone->managed_pages and the "gap" that above the per-zone @@ -246,6 +248,8 @@ struct swap_info_struct { struct work_struct discard_work; /* discard worker */ struct swap_cluster_info discard_cluster_head; /* list head of discard clusters */ struct swap_cluster_info discard_cluster_tail; /* list tail of discard clusters */ + unsigned int write_pending; + unsigned int max_writes; }; /* linux/mm/workingset.c */ @@ -329,6 +333,8 @@ extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem, unsigned long *nr_scanned); extern unsigned long shrink_all_memory(unsigned long nr_pages); extern int vm_swappiness; +extern int sysctl_swap_ratio; +extern int sysctl_swap_ratio_enable; extern int remove_mapping(struct address_space *mapping, struct page *page); extern unsigned long vm_total_pages; @@ -415,10 +421,18 @@ extern struct page *swapin_readahead(swp_entry_t, gfp_t, /* linux/mm/swapfile.c */ extern atomic_long_t nr_swap_pages; extern long total_swap_pages; +extern bool is_swap_fast(swp_entry_t entry); /* Swap 50% full? Release swapcache more aggressively.. */ -static inline bool vm_swap_full(void) +static inline bool vm_swap_full(struct swap_info_struct *si) { + /* + * If the swap device is fast, return true + * not to delay swap free. + */ + if (si->flags & SWP_FAST) + return true; + return atomic_long_read(&nr_swap_pages) * 2 < total_swap_pages; } @@ -454,7 +468,7 @@ struct backing_dev_info; #define get_nr_swap_pages() 0L #define total_swap_pages 0L #define total_swapcache_pages() 0UL -#define vm_swap_full() 0 +#define vm_swap_full(si) 0 #define si_swapinfo(val) \ do { (val)->freeswap = (val)->totalswap = 0; } while (0) |