if (PageDirty(page) && PagePrivate(page)) { 
if (PagePrivate(page)) { 
static pageout_t pageout(struct page *page, struct address_space *mapping){	/*	 * If the page is dirty, only perform writeback if that write	 * will be non-blocking.  To prevent this allocation from being	 * stalled by pagecache activity.  But note that there may be	 * stalls if we need to run get_block().  We could test	 * PagePrivate for that.	 *	 * If this process is currently in generic_file_write() against	 * this page's queue, we can perform writeback even if that	 * will block.	 *	 * If the page is swapcache, write it back even if that would	 * block, for some throttling. This happens by accident, because	 * swap_backing_dev_info is bust: it doesn't reflect the	 * congestion state of the swapdevs.  Easy to fix, if needed.	 * See swapfile.c:page_queue_congested().	 */	if (!is_page_cache_freeable(page))		return PAGE_KEEP;	if (!mapping) {		/*		 * Some data journaling orphaned pages can have		 * page->mapping == NULL while being dirty with clean buffers.		 */		if (PageDirty(page) && PagePrivate(page)) {			if (try_to_free_buffers(page)) {				ClearPageDirty(page);				printk("%s: orphaned page\n", __FUNCTION__);				return PAGE_CLEAN;			}		}		return PAGE_KEEP;	}	if (mapping->a_ops->writepage == NULL)		return PAGE_ACTIVATE;	if (!may_write_to_queue(mapping->backing_dev_info))		return PAGE_KEEP;	if (clear_page_dirty_for_io(page)) {		int res;		struct writeback_control wbc = {			.sync_mode = WB_SYNC_NONE,			.nr_to_write = SWAP_CLUSTER_MAX,			.nonblocking = 1,			.for_reclaim = 1,		};		SetPageReclaim(page);		res = mapping->a_ops->writepage(page, &wbc);		if (res < 0)			handle_write_error(mapping, page, res);		if (res == WRITEPAGE_ACTIVATE) {			ClearPageReclaim(page);			return PAGE_ACTIVATE;		}		if (!PageWriteback(page)) {			/* synchronous write or broken a_ops? */			ClearPageReclaim(page);		}		return PAGE_SUCCESS;	}	return PAGE_CLEAN;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/323aca6c0bda611d0f31b3234d9fe291d31a9207/vmscan.c/clean/mm/vmscan.c