On 06/04, Eric W. Biederman wrote: > > >> - restore_user_sigmask(ksig.sigmask, &sigsaved); > >> - if (signal_pending(current) && !ret) > >> + > >> + interrupted = signal_pending(current); > >> + restore_user_sigmask(ksig.sigmask, &sigsaved, interrupted); > >> + if (interrupted && !ret) > >> ret = -ERESTARTNOHAND; > > > > are wrong to begin with, and we really should aim for an interface > > which says "tell me whether you completed the system call, and I'll > > give you an error return if not". > > The pattern you are pointing out is specific to io_pgetevents and it's > variations. It does look buggy to me but not for the reason you point > out, but instead because it does not appear to let a pending signal > cause io_pgetevents to return early. > > I suspect we should fix that and have do_io_getevents return > -EINTR or -ERESTARTNOHAND like everyone else. Exactly. It should not even check signal_pending(). It can rely on wait_event_interruptible_hrtimeout(). > So can we please get this fix in and then look at cleaning up and > simplifying this code. Yes ;) Oleg.