On 04/24/2013 11:42 PM, Greg Thelen wrote: >> + vmpr->notify_userspace = true; > Should notify_userspace get cleared sometime? Seems like we might need > to clear or decrement notify_userspace in vmpressure_event() when > calling eventfd_signal(). > I am folding the attached patch and keeping the acks unless the ackers oppose. Greg, any other problem you spot here? Thanks for the review BTW.
diff --git a/mm/vmpressure.c b/mm/vmpressure.c index 1a082a0..e16256e 100644 --- a/mm/vmpressure.c +++ b/mm/vmpressure.c @@ -164,6 +164,7 @@ static bool vmpressure_event(struct vmpressure *vmpr, } } + vmpr->notify_userspace = false; mutex_unlock(&vmpr->events_lock); return signalled; @@ -249,8 +250,13 @@ void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, mutex_lock(&vmpr->sr_lock); vmpr->scanned += scanned; vmpr->reclaimed += reclaimed; - vmpr->notify_userspace = true; scanned = vmpr->scanned; + /* + * If we didn't reach this point, only kernel events will be triggered. + * It is the job of the worker thread to clean this up once the + * notifications are all delivered. + */ + vmpr->notify_userspace = true; mutex_unlock(&vmpr->sr_lock); schedule: