diff options
| author | Wim Van Sebroeck <wim@iguana.be> | 2007-05-11 19:03:13 +0000 | 
|---|---|---|
| committer | Wim Van Sebroeck <wim@iguana.be> | 2007-05-11 19:03:13 +0000 | 
| commit | 5c34202b8bf942da411b6599668a76b07449bbfd (patch) | |
| tree | 5719c361321eaddc8e4f1b0c8a7994f0e9a6fdd3 /mm/vmscan.c | |
| parent | 0d4804b31f91cfbcff6d62af0bc09a893a1c8ae0 (diff) | |
| parent | 1f8a6b658a943b4f04a1fc7b3a420360202c86cd (diff) | |
Merge /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'mm/vmscan.c')
| -rw-r--r-- | mm/vmscan.c | 23 | 
1 files changed, 12 insertions, 11 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index db023e2ff38..1be5a6376ef 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -284,12 +284,8 @@ static void handle_write_error(struct address_space *mapping,  				struct page *page, int error)  {  	lock_page(page); -	if (page_mapping(page) == mapping) { -		if (error == -ENOSPC) -			set_bit(AS_ENOSPC, &mapping->flags); -		else -			set_bit(AS_EIO, &mapping->flags); -	} +	if (page_mapping(page) == mapping) +		mapping_set_error(mapping, error);  	unlock_page(page);  } @@ -1323,8 +1319,6 @@ static int kswapd(void *p)  	for ( ; ; ) {  		unsigned long new_order; -		try_to_freeze(); -  		prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);  		new_order = pgdat->kswapd_max_order;  		pgdat->kswapd_max_order = 0; @@ -1335,12 +1329,19 @@ static int kswapd(void *p)  			 */  			order = new_order;  		} else { -			schedule(); +			if (!freezing(current)) +				schedule(); +  			order = pgdat->kswapd_max_order;  		}  		finish_wait(&pgdat->kswapd_wait, &wait); -		balance_pgdat(pgdat, order); +		if (!try_to_freeze()) { +			/* We can speed up thawing tasks if we don't call +			 * balance_pgdat after returning from the refrigerator +			 */ +			balance_pgdat(pgdat, order); +		}  	}  	return 0;  } @@ -1527,7 +1528,7 @@ static int __devinit cpu_callback(struct notifier_block *nfb,  	pg_data_t *pgdat;  	cpumask_t mask; -	if (action == CPU_ONLINE) { +	if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) {  		for_each_online_pgdat(pgdat) {  			mask = node_to_cpumask(pgdat->node_id);  			if (any_online_cpu(mask) != NR_CPUS)  | 
