On Thu, Apr 20, 2017 at 3:43 PM, Marko Rauhamaa <marko.rauhamaa@xxxxxxxxxxxx> wrote: > Amir Goldstein <amir73il@xxxxxxxxx>: > >> Sorry I messed up the previous patch. please try this one: > > I will try it. > >> + * do the right thing if there are no more events to >> + * read (i.e. return bytes read, -EAGAIN or wait). > > EAGAIN is the right thing to do when FAN_NONBLOCK has been specified. > Without FAN_NONBLOCK, EAGAIN is bound to confuse the application. That > could be documented, of course. > My comment says "do the right thing ... -EAGAIN or wait", meaning depending FAN_NONBLOCK. The same code that checks for FAN_NONBLOCK will take care of that. My patch only takes care of dropping the stale event and continue to next event. If there is no next event, code will "do the right thing". > More importantly, does EAGAIN here still guarantee EPOLLET semantics of > epoll(7)? IOW, if I get EAGAIN, I shouldn't have to try read(2)ing the > fanotify fd again before calling epoll_wait(2). > Yes, if you get EAGAIN it means there are no more events in the queue, so shouldn't have to try read again. Amir.