All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ladislav Michl <Ladislav.Michl-9Vj9tDbzfuSlVyrhU4qvOw@public.gmane.org>
To: Jeff Layton <jlayton-vpEMnDpepFuMZCB2o+C8xQ@public.gmane.org>
Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: Adjustable timeout
Date: Wed, 14 Jul 2010 00:17:50 +0200	[thread overview]
Message-ID: <20100713221750.GA2471@localhost.localdomain> (raw)
In-Reply-To: <20100713082916.03767113-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>

On Tue, Jul 13, 2010 at 08:29:16AM -0400, Jeff Layton wrote:
> On Tue, 13 Jul 2010 08:21:51 -0400
> Jeff Layton <jlayton-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org> wrote:
> > 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.
> 
> I should clarify too that wait only comes into play when the packet
> is ACK'ed. If it's not received by the server, then we'll need to
> determine what to do.
> 
> I think we need to be very careful about returning errors by default
> due to network partition. Apps generally don't expect it, so cifs ought
> to aggressively retry rather than returning errors to syscalls just
> because the server isn't responding.

Here we probably want to distinguish 'soft' and 'hard' mount option.
While 'hard' should do the best to get data written (and man page states
syscall block until server comes back), which is perfectly okay, 'soft'
is allowed to return error on server unresponsiveness. So, if above
describes 'hard' mount case, I do agree. 'Soft' mount option currently
poses a limit how long to wait and I'd like to see this timeout adjustable
(something like timeo parameter is okay).

Or does your proposal generally mean to stop distinguishing between 'soft'
and 'hard' mounts and make 'hard' default?

> > 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.

I'd go for SMB echo, just because it proves server side is still alive
more reliably. It would be also nice to have some way to let userspace
know that server didn't reply to echo request for last n seconds.

  parent reply	other threads:[~2010-07-13 22:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-13 10:48 Adjustable timeout Ladislav Michl
     [not found] ` <20100713104810.GA3001-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2010-07-13 12:21   ` Jeff Layton
     [not found]     ` <20100713082151.3d231b8b-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2010-07-13 12:29       ` Jeff Layton
     [not found]         ` <20100713082916.03767113-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2010-07-13 22:17           ` Ladislav Michl [this message]
     [not found]             ` <20100713221750.GA2471-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2010-07-14 12:12               ` Jeff Layton
     [not found]                 ` <20100714081222.35b998ce-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2010-07-14 22:10                   ` Ladislav Michl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100713221750.GA2471@localhost.localdomain \
    --to=ladislav.michl-9vj9tdbzfuslvyrhu4qvow@public.gmane.org \
    --cc=jlayton-vpEMnDpepFuMZCB2o+C8xQ@public.gmane.org \
    --cc=ladis-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org \
    --cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.