lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 015/188] ext4: fix avefreec in find_group_orlov
    Date
    From: Pan Dong <pandong.peter@bytedance.com>

    commit c89849cc0259f3d33624cc3bd127685c3c0fa25d upstream.

    The avefreec should be average free clusters instead
    of average free blocks, otherwize Orlov's allocator
    will not work properly when bigalloc enabled.

    Cc: stable@kernel.org
    Signed-off-by: Pan Dong <pandong.peter@bytedance.com>
    Link: https://lore.kernel.org/r/20210525073656.31594-1-pandong.peter@bytedance.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    --- a/fs/ext4/ialloc.c
    +++ b/fs/ext4/ialloc.c
    @@ -405,7 +405,7 @@ static void get_orlov_stats(struct super
    *
    * We always try to spread first-level directories.
    *
    - * If there are blockgroups with both free inodes and free blocks counts
    + * If there are blockgroups with both free inodes and free clusters counts
    * not worse than average we return one with smallest directory count.
    * Otherwise we simply return a random group.
    *
    @@ -414,7 +414,7 @@ static void get_orlov_stats(struct super
    * It's OK to put directory into a group unless
    * it has too many directories already (max_dirs) or
    * it has too few free inodes left (min_inodes) or
    - * it has too few free blocks left (min_blocks) or
    + * it has too few free clusters left (min_clusters) or
    * Parent's group is preferred, if it doesn't satisfy these
    * conditions we search cyclically through the rest. If none
    * of the groups look good we just look for a group with more
    @@ -430,7 +430,7 @@ static int find_group_orlov(struct super
    ext4_group_t real_ngroups = ext4_get_groups_count(sb);
    int inodes_per_group = EXT4_INODES_PER_GROUP(sb);
    unsigned int freei, avefreei, grp_free;
    - ext4_fsblk_t freeb, avefreec;
    + ext4_fsblk_t freec, avefreec;
    unsigned int ndirs;
    int max_dirs, min_inodes;
    ext4_grpblk_t min_clusters;
    @@ -449,9 +449,8 @@ static int find_group_orlov(struct super

    freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter);
    avefreei = freei / ngroups;
    - freeb = EXT4_C2B(sbi,
    - percpu_counter_read_positive(&sbi->s_freeclusters_counter));
    - avefreec = freeb;
    + freec = percpu_counter_read_positive(&sbi->s_freeclusters_counter);
    + avefreec = freec;
    do_div(avefreec, ngroups);
    ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter);


    \
     
     \ /
      Last update: 2021-07-19 16:57    [W:4.041 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site