android_kernel_xiaomi_sm8350/fs/nfs
Mel Gorman b969c4ab9f mm: compaction: determine if dirty pages can be migrated without blocking within ->migratepage
Asynchronous compaction is used when allocating transparent hugepages to
avoid blocking for long periods of time.  Due to reports of stalling,
there was a debate on disabling synchronous compaction but this severely
impacted allocation success rates.  Part of the reason was that many dirty
pages are skipped in asynchronous compaction by the following check;

	if (PageDirty(page) && !sync &&
		mapping->a_ops->migratepage != migrate_page)
			rc = -EBUSY;

This skips over all mapping aops using buffer_migrate_page() even though
it is possible to migrate some of these pages without blocking.  This
patch updates the ->migratepage callback with a "sync" parameter.  It is
the responsibility of the callback to fail gracefully if migration would
block.

Signed-off-by: Mel Gorman <mgorman@suse.de>
Reviewed-by: Rik van Riel <riel@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: Dave Jones <davej@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Andy Isaacson <adi@hexapodia.org>
Cc: Nai Xia <nai.xia@gmail.com>
Cc: Johannes Weiner <jweiner@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-01-12 20:13:09 -08:00
..
blocklayout pnfsblock: fix writeback deadlock 2011-10-18 09:08:15 -07:00
objlayout pnfs-obj: Must return layout on IO error 2012-01-06 08:55:33 -05:00
cache_lib.c switch vfs_path_lookup() to struct path 2011-07-20 01:44:14 -04:00
cache_lib.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
callback_proc.c NFSv4.1: fix backchannel slotid off-by-one bug 2012-01-05 10:42:40 -05:00
callback_xdr.c nfs: set vs_hidden on nfs4_callback_version4 (try #2) 2011-11-04 09:00:09 -04:00
callback.c sunrpc: use better NUMA affinities 2011-08-19 13:25:36 -04:00
callback.h NFSv4.1: Fix the callback 'highest_used_slotid' behaviour 2011-08-04 11:55:35 -04:00
client.c NFSv4: Change the default setting of the nfs4_disable_idmapping parameter 2012-01-09 14:22:27 -05:00
delegation.c NFS: Use the inode->i_version to cache NFSv4 change attribute information 2011-10-18 09:14:34 -07:00
delegation.h
dir.c switch ->mknod() to umode_t 2012-01-03 22:54:54 -05:00
direct.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
dns_resolve.c
dns_resolve.h
file.c NFS - fix recent breakage to NFS error handling. 2012-01-05 10:42:39 -05:00
fscache-index.c NFS: Use the inode->i_version to cache NFSv4 change attribute information 2011-10-18 09:14:34 -07:00
fscache.c
fscache.h
getroot.c
idmap.c NFSv4: Save the owner/group name string when doing open 2012-01-07 13:22:46 -05:00
inode.c Merge branch 'nfs-for-3.3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs 2012-01-10 14:57:40 -08:00
internal.h mm: compaction: determine if dirty pages can be migrated without blocking within ->migratepage 2012-01-12 20:13:09 -08:00
iostat.h
Kconfig pnfs: Automatically select blocks & objects layouts 2011-08-11 17:51:27 -07:00
Makefile pnfsblock: add blocklayout Kconfig option, Makefile, and stubs 2011-07-31 12:18:15 -04:00
mount_clnt.c
namespace.c
nfs2xdr.c
nfs3acl.c switch posix_acl_create() to umode_t * 2011-08-01 02:09:42 -04:00
nfs3proc.c Freezer / sunrpc / NFS: don't allow TASK_KILLABLE sleeps to block the freezer 2011-12-06 22:12:27 +01:00
nfs3xdr.c
nfs4_fs.h NFS: Cache state owners after files are closed 2012-01-05 11:59:18 -05:00
nfs4filelayout.c nfs: fix a minor do_div portability issue 2012-01-05 10:42:42 -05:00
nfs4filelayout.h NFSv4.1: do not use deviceids after MDS clientid invalidation 2011-07-12 13:40:29 -04:00
nfs4filelayoutdev.c
nfs4namespace.c
nfs4proc.c Merge branch 'nfs-for-3.3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs 2012-01-10 14:57:40 -08:00
nfs4renewd.c NFSv4: The NFSv4.0 client must send RENEW calls if it holds a delegation 2011-08-24 15:07:37 -04:00
nfs4state.c NFS: Cache state owners after files are closed 2012-01-05 11:59:18 -05:00
nfs4xdr.c NFSv4: Save the owner/group name string when doing open 2012-01-07 13:22:46 -05:00
nfsroot.c
pagelist.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
pnfs_dev.c fs: add export.h to files using EXPORT_SYMBOL/THIS_MODULE macros 2011-10-31 19:30:31 -04:00
pnfs.c NFS: Remove pNFS bloat from the generic write path 2012-01-06 08:57:46 -05:00
pnfs.h pnfs-obj: Must return layout on IO error 2012-01-06 08:55:33 -05:00
proc.c Freezer / sunrpc / NFS: don't allow TASK_KILLABLE sleeps to block the freezer 2011-12-06 22:12:27 +01:00
read.c NFS: Revert pnfs ugliness from the generic NFS read code path 2011-11-10 14:50:26 -05:00
super.c Merge branch 'nfs-for-3.3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs 2012-01-10 14:57:40 -08:00
symlink.c
sysctl.c
unlink.c NFS: Get rid of nfs_restart_rpc() 2011-10-19 13:58:30 -07:00
write.c mm: compaction: determine if dirty pages can be migrated without blocking within ->migratepage 2012-01-12 20:13:09 -08:00