• Dennis Zhou's avatar
    percpu: fix iteration to prevent skipping over block · 1fa4df3e
    Dennis Zhou authored
    The iterator functions pcpu_next_md_free_region and
    pcpu_next_fit_region use the block offset to determine if they have
    checked the area in the prior iteration. However, this causes an issue
    when the block offset is greater than subsequent block contig hints. If
    within the iterator it moves to check subsequent blocks, it may fail in
    the second predicate due to the block offset not being cleared. Thus,
    this causes the allocator to skip over blocks leading to false failures
    when allocating from the reserved chunk. While this happens in the
    general case as well, it will only fail if it cannot allocate a new
    chunk.
    
    This patch resets the block offset to 0 to pass the second predicate
    when checking subseqent blocks within the iterator function.
    Signed-off-by: default avatarDennis Zhou <dennisszhou@gmail.com>
    Reported-and-tested-by: default avatarLuis Henriques <lhenriques@suse.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    1fa4df3e
percpu.c 82.1 KB