summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sd.c
diff options
context:
space:
mode:
authorVincent Guittot <vincent.guittot@linaro.org>2020-07-10 17:24:26 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-22 09:10:07 +0200
commit331d1ee25df0c0ccaff80fd7dbd8edc26764b7c6 (patch)
tree2ac2de84103c679af042265c8fe23d5d28a5938a /drivers/scsi/sd.c
parent01209293ef68d8b947859b95c20d721095cd6809 (diff)
downloadlinux-stable-331d1ee25df0c0ccaff80fd7dbd8edc26764b7c6.tar.gz
linux-stable-331d1ee25df0c0ccaff80fd7dbd8edc26764b7c6.tar.bz2
linux-stable-331d1ee25df0c0ccaff80fd7dbd8edc26764b7c6.zip
sched/fair: handle case of task_h_load() returning 0
commit 01cfcde9c26d8555f0e6e9aea9d6049f87683998 upstream. task_h_load() can return 0 in some situations like running stress-ng mmapfork, which forks thousands of threads, in a sched group on a 224 cores system. The load balance doesn't handle this correctly because env->imbalance never decreases and it will stop pulling tasks only after reaching loop_max, which can be equal to the number of running tasks of the cfs. Make sure that imbalance will be decreased by at least 1. misfit task is the other feature that doesn't handle correctly such situation although it's probably more difficult to face the problem because of the smaller number of CPUs and running tasks on heterogenous system. We can't simply ensure that task_h_load() returns at least one because it would imply to handle underflow in other places. Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com> Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com> Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: <stable@vger.kernel.org> # v4.4+ Link: https://lkml.kernel.org/r/20200710152426.16981-1-vincent.guittot@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/scsi/sd.c')
0 files changed, 0 insertions, 0 deletions