While working on an NFS issue recently I was informed (or maybe "reminded") that congestion_wait() doesn't really do what we think it does. It is indistinguishable from schedule_timeout_uninterruptible(). Some current users for congestion_wait() would be better suited by __GFP_NOFAIL. In related discussions it was pointed out that the __GFP_NOFAIL documentation could usefully clarify the costs of its use. So this set of patch addresses some of these issues. The patches are all independent and can safely be applied separately in different tress as appropriate. They: - add or improve documentation relating to these issues - make a tiny fix to the page_alloc_bulk_* - replace those calls to congestion_wait() which are simply waiting to retry a memory allocation. These are the easy bits. There are 5 calls to congestion_wait() and one to wait_iff_congested() in mm/ which need consideration. There are multiple calls to congestion_wait in fs/, particularly fs/f2fs/ which need to be addressed too. I'll try to form an opinion about these in coming weeks. Thanks, NeilBrown --- NeilBrown (6): MM: improve documentation for __GFP_NOFAIL MM: annotate congestion_wait() and wait_iff_congested() as ineffective. EXT4: Remove ENOMEM/congestion_wait() loops. EXT4: remove congestion_wait from ext4_bio_write_page, and simplify XFS: remove congestion_wait() loop from kmem_alloc() XFS: remove congestion_wait() loop from xfs_buf_alloc_pages() fs/ext4/ext4.h | 2 +- fs/ext4/ext4_jbd2.c | 8 +++++- fs/ext4/extents.c | 49 ++++++++++++++----------------------- fs/ext4/extents_status.c | 35 ++++++++++++++------------ fs/ext4/extents_status.h | 2 +- fs/ext4/indirect.c | 2 +- fs/ext4/inode.c | 6 ++--- fs/ext4/ioctl.c | 4 +-- fs/ext4/page-io.c | 13 ++++------ fs/ext4/super.c | 2 +- fs/jbd2/transaction.c | 8 +++--- fs/xfs/kmem.c | 16 +++--------- fs/xfs/xfs_buf.c | 6 ++--- include/linux/backing-dev.h | 7 ++++++ mm/backing-dev.c | 9 +++++++ 15 files changed, 86 insertions(+), 83 deletions(-) -- Signature