SetPageNosaveFree(pfn_to_page(zone_pfn + 
if (pfn_valid(zone_pfn + zone->zone_start_pfn)) ClearPageNosaveFree(pfn_to_page(zone_pfn + 
static struct pbe * swsusp_pagedir_relocate(struct pbe *pblist){	struct zone *zone;	unsigned long zone_pfn;	struct pbe *pbpage, *tail, *p;	void *m;	int rel = 0, error = 0;	if (!pblist) /* a sanity check */		return NULL;	pr_debug("swsusp: Relocating pagedir (%lu pages to check)\n",			swsusp_info.pagedir_pages);	/* Set page flags */	for_each_zone (zone) {        	for (zone_pfn = 0; zone_pfn < zone->spanned_pages; ++zone_pfn)                	SetPageNosaveFree(pfn_to_page(zone_pfn +					zone->zone_start_pfn));	}	/* Clear orig addresses */	for_each_pbe (p, pblist)		ClearPageNosaveFree(virt_to_page(p->orig_address));	tail = pblist + PB_PAGE_SKIP;	/* Relocate colliding pages */	for_each_pb_page (pbpage, pblist) {		if (!PageNosaveFree(virt_to_page((unsigned long)pbpage))) {			m = (void *)get_usable_page(GFP_ATOMIC | __GFP_COLD);			if (!m) {				error = -ENOMEM;				break;			}			memcpy(m, (void *)pbpage, PAGE_SIZE);			if (pbpage == pblist)				pblist = (struct pbe *)m;			else				tail->next = (struct pbe *)m;			eat_page((void *)pbpage);			pbpage = (struct pbe *)m;			/* We have to link the PBEs again */			for (p = pbpage; p < pbpage + PB_PAGE_SKIP; p++)				if (p->next) /* needed to save the end */					p->next = p + 1;			rel++;		}		tail = pbpage + PB_PAGE_SKIP;	}	if (error) {		printk("\nswsusp: Out of memory\n\n");		free_pagedir(pblist);		free_eaten_memory();		pblist = NULL;		/* Is this even worth handling? It should never ever happen, and we		   have just lost user's state, anyway... */	} else		printk("swsusp: Relocated %d pages\n", rel);	return pblist;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2c1b4a5ca48831595979a850f40ced8e7da026f8/swsusp.c/buggy/kernel/power/swsusp.c