diff options
Diffstat (limited to 'mm/swap_state.c')
| -rw-r--r-- | mm/swap_state.c | 41 | 
1 files changed, 7 insertions, 34 deletions
| diff --git a/mm/swap_state.c b/mm/swap_state.c index ed91091d1e68..05b6803f0cce 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -39,10 +39,6 @@ struct address_space *swapper_spaces[MAX_SWAPFILES];  static unsigned int nr_swapper_spaces[MAX_SWAPFILES];  bool swap_vma_readahead = true; -#define SWAP_RA_MAX_ORDER_DEFAULT	3 - -static int swap_ra_max_order = SWAP_RA_MAX_ORDER_DEFAULT; -  #define SWAP_RA_WIN_SHIFT	(PAGE_SHIFT / 2)  #define SWAP_RA_HITS_MASK	((1UL << SWAP_RA_WIN_SHIFT) - 1)  #define SWAP_RA_HITS_MAX	SWAP_RA_HITS_MASK @@ -664,6 +660,13 @@ struct page *swap_readahead_detect(struct vm_fault *vmf,  	pte_t *tpte;  #endif +	max_win = 1 << min_t(unsigned int, READ_ONCE(page_cluster), +			     SWAP_RA_ORDER_CEILING); +	if (max_win == 1) { +		swap_ra->win = 1; +		return NULL; +	} +  	faddr = vmf->address;  	entry = pte_to_swp_entry(vmf->orig_pte);  	if ((unlikely(non_swap_entry(entry)))) @@ -672,12 +675,6 @@ struct page *swap_readahead_detect(struct vm_fault *vmf,  	if (page)  		return page; -	max_win = 1 << READ_ONCE(swap_ra_max_order); -	if (max_win == 1) { -		swap_ra->win = 1; -		return NULL; -	} -  	fpfn = PFN_DOWN(faddr);  	swap_ra_info = GET_SWAP_RA_VAL(vma);  	pfn = PFN_DOWN(SWAP_RA_ADDR(swap_ra_info)); @@ -786,32 +783,8 @@ static struct kobj_attribute vma_ra_enabled_attr =  	__ATTR(vma_ra_enabled, 0644, vma_ra_enabled_show,  	       vma_ra_enabled_store); -static ssize_t vma_ra_max_order_show(struct kobject *kobj, -				     struct kobj_attribute *attr, char *buf) -{ -	return sprintf(buf, "%d\n", swap_ra_max_order); -} -static ssize_t vma_ra_max_order_store(struct kobject *kobj, -				      struct kobj_attribute *attr, -				      const char *buf, size_t count) -{ -	int err, v; - -	err = kstrtoint(buf, 10, &v); -	if (err || v > SWAP_RA_ORDER_CEILING || v <= 0) -		return -EINVAL; - -	swap_ra_max_order = v; - -	return count; -} -static struct kobj_attribute vma_ra_max_order_attr = -	__ATTR(vma_ra_max_order, 0644, vma_ra_max_order_show, -	       vma_ra_max_order_store); -  static struct attribute *swap_attrs[] = {  	&vma_ra_enabled_attr.attr, -	&vma_ra_max_order_attr.attr,  	NULL,  }; | 
