/* * linux/mm/compaction.c * * Memory compaction for the reduction of external fragmentation. Note that * this heavily depends upon page migration to do all the real heavy * lifting * * Copyright IBM Corp. 2007-2010 Mel Gorman <mel@csn.ul.ie> */#include <linux/swap.h>#include <linux/migrate.h>#include <linux/compaction.h>#include <linux/mm_inline.h>#include <linux/backing-dev.h>#include <linux/sysctl.h>#include <linux/sysfs.h>#include <linux/balloon_compaction.h>#include <linux/page-isolation.h>#include"internal.h"#ifdef CONFIG_COMPACTIONstaticinlinevoidcount_compact_event(enum vm_event_item item){count_vm_event(item);}staticinlinevoidcount_compact_events(enum vm_event_item item,long delta){count_vm_events(item, delta);}#else#define count_compact_event(item) do { } while (0)#define count_compact_events(item, delta) do { } while (0)#endif#if defined CONFIG_COMPACTION || defined CONFIG_CMA#define CREATE_TRACE_POINTS#include <trace/events/compaction.h>static unsigned longrelease_freepages(struct