• Theodore Ts'o's avatar
    ext4 crypto: allocate bounce pages using GFP_NOWAIT · 3dbb5eb9
    Theodore Ts'o authored
    Previously we allocated bounce pages using a combination of
    alloc_page() and mempool_alloc() with the __GFP_WAIT bit set.
    Instead, use mempool_alloc() with GFP_NOWAIT.  The mempool_alloc()
    function will try using alloc_pages() initially, and then only use the
    mempool reserve of pages if alloc_pages() is unable to fulfill the
    request.
    
    This minimizes the the impact on the mm layer when we need to do a
    large amount of writeback of encrypted files, as Jaeguk Kim had
    reported that under a heavy fio workload on a system with restricted
    amounts memory (which unfortunately, includes many mobile handsets),
    he had observed the the OOM killer getting triggered several times.
    Using GFP_NOWAIT
    
    If the mempool_alloc() function fails, we will retry the page
    writeback at a later time; the function of the mempool is to ensure
    that we can writeback at least 32 pages at a time, so we can more
    efficiently dispatch I/O under high memory pressure situations.  In
    the future we should make this be a tunable so we can determine the
    best tradeoff between permanently sequestering memory and the ability
    to quickly launder pages so we can free up memory quickly when
    necessary.
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    3dbb5eb9
crypto.c 12.4 KB