On 9/14/20 9:05 AM, Tejun Heo wrote: > adjust_inuse_and_calc_cost() is responsible for reducing the amount of > donated weights dynamically in period as the budget runs low. Because we > don't want to do full donation calculation in period, we keep latching up > inuse by INUSE_ADJ_STEP_PCT of the active weight of the cgroup until the > resulting hweight_inuse is satisfactory. > > Unfortunately, the adj_step calculation was reading the active weight before > acquiring ioc->lock. Because the current thread could have lost race to > activate the iocg to another thread before entering this function, it may > read the active weight as zero before acquiring ioc->lock. When this > happens, the adj_step is calculated as zero and the incremental adjustment > loop becomes an infinite one. > > Fix it by fetching the active weight after acquiring ioc->lock. Applied, thanks. -- Jens Axboe