lkml.org 
[lkml]   [2015]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] ext4: replace open coded nofail allocation
    Date
    ext4_free_blocks is looping around the allocation request and mimics
    __GFP_NOFAIL behavior without any allocation fallback strategy. Let's
    remove the open coded loop and replace it with __GFP_NOFAIL. Without
    the flag the allocator has no way to find out never-fail requirement
    and cannot help in any way.

    Signed-off-by: Michal Hocko <mhocko@suse.cz>
    ---

    Hi Ted,
    I am sorry for seding these changes one at the time but I haven't found
    a proper way to find all of them automatically. So I am discovering
    them as I check the code due to other reasons.

    Thanks!

    fs/ext4/mballoc.c | 16 +++++-----------
    1 file changed, 5 insertions(+), 11 deletions(-)

    diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
    index 8d1e60214ef0..41260489d3bc 100644
    --- a/fs/ext4/mballoc.c
    +++ b/fs/ext4/mballoc.c
    @@ -4800,18 +4800,12 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode,
    /*
    * blocks being freed are metadata. these blocks shouldn't
    * be used until this transaction is committed
    + *
    + * We use __GFP_NOFAIL because ext4_free_blocks() is not allowed
    + * to fail.
    */
    - retry:
    - new_entry = kmem_cache_alloc(ext4_free_data_cachep, GFP_NOFS);
    - if (!new_entry) {
    - /*
    - * We use a retry loop because
    - * ext4_free_blocks() is not allowed to fail.
    - */
    - cond_resched();
    - congestion_wait(BLK_RW_ASYNC, HZ/50);
    - goto retry;
    - }
    + new_entry = kmem_cache_alloc(ext4_free_data_cachep,
    + GFP_NOFS|__GFP_NOFAIL);
    new_entry->efd_start_cluster = bit;
    new_entry->efd_group = block_group;
    new_entry->efd_count = count_clusters;
    --
    2.1.4


    \
     
     \ /
      Last update: 2015-06-23 12:01    [W:3.759 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site