Re: Ctrl+C doesn't interrupt process waiting for I/O

From: Bill Davidsen
Date: Sun Jun 29 2008 - 19:55:37 EST


Jeremy Fitzhardinge wrote:
Avi Kivity wrote:
Applications should not assume that write() (or other syscalls) can't return EINTR. Not all filesystems have a bounded-time backing store.

The distinction between 'fast' (filesystem) and 'slow' (terminals and pipes) blocking syscalls goes back to the earliest days of Unix, and is part of the ABI. Most filesystem syscalls are not documented to ever return EINTR.

'soft' has its own problems; namely false positives when someone steps on the network cable, temporarily blocking packet flow, or when using a clustered server which may take some time to recover from a fault.

Sure. It's the basic problem of trying to make network access transparent by hiding the failure modes. You either need to put up with spurious timeouts caused by transient failures, or unbounded blocking on real failures.

Basic problem is that you can get a process which you can't interrupt (in in most cases can't kill) which has resources tied up. Given the choice between surprising a process with an EINTR or killing it during a reboot to get the system usable again, I would rather surprise.

The current situation is infrequent but not unheard of. And the causes are not all rooted in NFS, I used to see this 4-5 times a year when I was running nntp clusters with heavily threaded applications, every once in a while some thread would hang in a waiting for i/o state and could be killed or fixed. I can't see that an application error would result in a thread being left waiting i/o and uninterruptable, that's a kernel state.

--
Bill Davidsen <davidsen@xxxxxxx>
"We have more to fear from the bungling of the incompetent than from
the machinations of the wicked." - from Slashdot
--
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/