On Tue, 13 Jul 2010 12:48:10 +0200
Ladislav Michl <ladislav.mi...@seznam.cz> wrote:

> Hello,
> 
> I'm using network storage for voicemail recording, which works pretty well
> on responsive servers. However in case of server crash on malfunction even
> open syscall takes ages to return error, which is just unfortunate.
> 
> Situation was described in thread "Timeout waaay too long"
> http://lists.samba.org/archive/linux-cifs-client/2006-February/001203.html
> and now, afer more than four years, it is not any better.
> 
> My very problem could be probably solved in userspace with "guard" thread
> killing stuck open or write syscall and moving to next storage available,
> but I found such a solution unly.
> 
> There is interesting notion in post "[PATCH] cifs: hard mount option
> behaviour" 
> http://lists.samba.org/archive/linux-cifs-client/2010-June/006291.html
> about what is considered a responsive server today.
> 
> For now I modified timeouts in SendReceive(2), which improved situation for
> me, but the real qustion is, how should widely acceptable solution look like.
> 
> Thanks for your suggestions,
>       ladis

Agreed that the situation still sucks and it's high time we start this
discussion from first principles.

cifs always uses reliable transport (TCP primarily, but there has been
some discussion of using SCTP in the past). With a reliable transport
the kernel knows when the server has received the packet (it's ACK'ed).

Here's how I think it ought to work (at least, it's a starting point for
discussion):

When the client sends a call to the server, the thread waits
indefinitely for a reply. That wait is generally interruptible via
signal, however.

If the socket changes state (possibly indicating that the server
crashed before a reply could be sent to the call), then any calls in
flight should be reissued once the socket is set back up.

Now, what to do in the situation where the client sends a call, the
server crashes and no further calls are sent? The client might block
indefinitely in that case since there is no more network traffic on the
socket.

The sockets should do some sort of keepalive. A normal TCP keepalive
might be ok, or we could consider doing SMB "pings" for this. That
should make sure that we notice state changes in a timely fashion and
should also help prevent disconnection on low-traffic sockets.

Thoughts?
-- 
Jeff Layton <jlay...@samba.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to