I am develpoing a network filesystem and I come across the problem with
noninteruptible waiting (the same as with NFS). Unfortunately there are
some cases, where waiting interuptibly and returning ERESTARTSYS is
difficult to imposible to do (when upcall is done, it must be remembered,
for the restarted syscall, but the syscall may not get restarted).
I can see 2 ways out for most cases.
The simpler one: add a TASK_KILLABLE state, that would be between INTERUPTIBLE
and NONINTERUPTIBLE. It could be interupted only with SIGKILL (I first thought
SIGSTOP too but that one shouldn't matter). In that case the syscall knows
it's canceled. I think most waiting in D state can be changed to be killable.
Mainly when handling page-fault (which may wait on network, that is even
indefinitely in case of failure). It won't make the system behave very nicely
in case of network failure, but would at least allow killing locked processes.
The more complicated would be to change the signal handling to allow hook
to be called when the syscall won't be restarted so the driver could
get rid of now invalid state information.
Does a patch adding a TASK_KILLABLE state have a chance to get in (in 2.5)?
Or can anybody thik of more elegant solution?
--------------------------------------------------------------------------------
- Jan Hudec `Bulb' <bulb@ucw.cz>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/