On 6/17/21 6:05 PM, Charan Teja Kalla wrote: > The wait_event/freezable_timeout() documentation says that: > * Returns: > * 0 if the @condition evaluated to %false after the @timeout elapsed, > or > * 1 if the @condition evaluated to %true after the @timeout elapsed, > * or the remaining jiffies (at least 1) if the @condition evaluated > * to %true before the @timeout elapsed. > > which means the condition must be evaluated to true or timeout should be > elapsed for the function wait_event_freezable_timeout() to return. > > Please check the macro implementation of __wait_event, where it will be > in for(;;) till the condition is evaluated to true or timeout happens. > #define __wait_event_freezable_timeout(wq_head, condition, timeout) > > ___wait_event(wq_head, ___wait_cond_timeout(condition), > > TASK_INTERRUPTIBLE, 0, timeout, > > __ret = freezable_schedule_timeout(__ret)) > > Thus the plain wakeup of kcompactd don't do the proactive compact work. > And so we should identify its wakeup for proactive work with a separate > flag. OK, you're right, I forgot that the macro has the for loop to guard against spurious wakeups.