In FUSE interrupts are sent to userspace, and the filesystem decidesWhy do you think that it is valid to ignore pending signals?
what to do with them. So it is entirely possible and valid for a
filesystem to ignore an interrupt. If an operation was non-blocking
(such as one returning an error), then there would in fact be no
purpose in checking interrupts.
You seem to be asserting that it okay for processes to hang,
uninterruptibly, when accessing files on fuse mounted file
systems?
Perhaps the right error to return when there is a signal
pending is EINTR and not ESTALE or some other error? There
has to be some way for the application to detect that its
system call was interrupted due to a signal pending.
Traditionally a lot of filesystem related system calls are not
interruptible, and for good reason. For example what happens, if an
app receives a signal, while the filesystem is performing a rename()
request? It would be very confusing if the call returned EINTR, but
the rename would successfully complete regardless.
We had a related problem with the open(O_CREAT) call in fuse, which
was interruptible between the creation and the actual open because of
a design mistake. So it could return EINTR, after the file was
created, and this broke a real world application (don't have details
at hand, but could dig them out if you are interested).
I don't know what NFS does, but returning EINTR without actually
canceling an operation in the server is generally not a good idea.
So while sending a signal might reliably work in NFS to break out ofHave you noticed another one? I would be happy to chat with the
the loop, it does not necessarily work for other filesystems, and fuse
may not be the only one affected.
developers for that file system to see if this support would
negatively impact them.
Oh, I have no idea. And I wouldn't want to do a full audit of all the
filesystems to find out. But if you do, please go ahead.
A few solutions come to mind, perhaps the best is to introduce aWe don't need more error numbers, we've got plenty already. :-)
kernel internal errno value (ERETRYSTALE), that forces the relevant
system calls to be retried.
NFS could transform ESTALE errors to ERETRYSTALE and get the desired
behavior, while other filesystems would not be affected.
That's a rather poor excuse against a simple solution which would
spare us some backward compatibility problems.
Do you have anything more specific about any real problems?
I see lots of "mays" and "coulds", but I don't see anything
that I can do to make this support better.
Implement the above suggestion? Or something else.
Otherwise I have to NAK this patch due to the possibility of it
breaking existing fuse installations.