Re: I finally prepared a testcase for read(inotify_fd) getting EINTRon PTRACE_ATTACH

From: Denys Vlasenko
Date: Fri Feb 10 2012 - 11:19:58 EST


On 02/10/2012 04:09 PM, Oleg Nesterov wrote:
On 02/10, Oleg Nesterov wrote:
At first glance this looks obvious? I never used inotify and I never
looked into fs/notify/inotify/, but it seems that inotify_read() simply
returns -EINTR if signal_pending() and doesn't implement restarts.

Probably this trivial change

--- x/fs/notify/inotify/inotify_user.c
+++ x/fs/notify/inotify/inotify_user.c
@@ -264,7 +264,7 @@ static ssize_t inotify_read(struct file
ret = -EAGAIN;
if (file->f_flags& O_NONBLOCK)
break;
- ret = -EINTR;
+ ret = -ERESTARTSYS;
if (signal_pending(current))
break;


makes sense.

except I meant -ERESTARTNOHAND to avoid the behavioural change.

I run-tested the fix. It works: testcase no longer fails
(modulo incorrect logic in the testcase which wase not working
properly on "no bug detected" code path. Fixed one:
http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/tests/ptrace-tests/tests/eintr-on-attach.c?cvsroot=systemtap
)

I'm not sure inotify really wants to deviate from other reads
and return -EINTR even for SA_RESTARTing signals. IOW:
I think -ERESTARTSYS here would be more correct than -ERESTARTNOHAND.

If -ERESTARTNOHAND is really what inotify people want, they need to
add a comment about it.

--
vda
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/