if (current->flags & PF_FREEZE) refrigerator(PF_FREEZE); 
 try_to_freeze(); 
static int kswapd(void *p){	unsigned long order;	pg_data_t *pgdat = (pg_data_t*)p;	struct task_struct *tsk = current;	DEFINE_WAIT(wait);	struct reclaim_state reclaim_state = {		.reclaimed_slab = 0,	};	cpumask_t cpumask;	daemonize("kswapd%d", pgdat->node_id);	cpumask = node_to_cpumask(pgdat->node_id);	if (!cpus_empty(cpumask))		set_cpus_allowed(tsk, cpumask);	current->reclaim_state = &reclaim_state;	/*	 * Tell the memory management that we're a "memory allocator",	 * and that if we need more memory we should get access to it	 * regardless (see "__alloc_pages()"). "kswapd" should	 * never get caught in the normal page freeing logic.	 *	 * (Kswapd normally doesn't need memory anyway, but sometimes	 * you need a small amount of memory in order to be able to	 * page out something else, and this flag essentially protects	 * us from recursively trying to free more memory as we're	 * trying to free the first piece of memory in the first place).	 */	tsk->flags |= PF_MEMALLOC|PF_KSWAPD;	order = 0;	for ( ; ; ) {		unsigned long new_order;		if (current->flags & PF_FREEZE)			refrigerator(PF_FREEZE);		prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);		new_order = pgdat->kswapd_max_order;		pgdat->kswapd_max_order = 0;		if (order < new_order) {			/*			 * Don't sleep if someone wants a larger 'order'			 * allocation			 */			order = new_order;		} else {			schedule();			order = pgdat->kswapd_max_order;		}		finish_wait(&pgdat->kswapd_wait, &wait);		balance_pgdat(pgdat, 0, order);	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3e1d1d28d99dabe63c64f7f40f1ca1d646de1f73/vmscan.c/clean/mm/vmscan.c