• Konstantin Khlebnikov's avatar
    ext4: handle the rest of ext4_mb_load_buddy() ENOMEM errors · 9651e6b2
    Konstantin Khlebnikov authored
    I've got another report about breaking ext4 by ENOMEM error returned from
    ext4_mb_load_buddy() caused by memory shortage in memory cgroup.
    This time inside ext4_discard_preallocations().
    
    This patch replaces ext4_error() with ext4_warning() where errors returned
    from ext4_mb_load_buddy() are not fatal and handled by caller:
    * ext4_mb_discard_group_preallocations() - called before generating ENOSPC,
      we'll try to discard other group or return ENOSPC into user-space.
    * ext4_trim_all_free() - just stop trimming and return ENOMEM from ioctl.
    
    Some callers cannot handle errors, thus __GFP_NOFAIL is used for them:
    * ext4_discard_preallocations()
    * ext4_mb_discard_lg_preallocations()
    
    Fixes: adb7ef60 ("ext4: use __GFP_NOFAIL in ext4_free_blocks()")
    Signed-off-by: default avatarKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    9651e6b2
mballoc.c 146 KB