Linux NFS development
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@poochiereds.net>
To: Christoph Hellwig <hch@lst.de>
Cc: "J. Bruce Fields" <bfields@fieldses.org>,
	Kinglong Mee <kinglongmee@gmail.com>,
	linux-nfs@vger.kernel.org
Subject: Re: [PATCH RFC] nfsd: serialize layout stateid morphing operations
Date: Sat, 5 Dec 2015 07:24:09 -0500	[thread overview]
Message-ID: <20151205072409.46d66109@tlielax.poochiereds.net> (raw)
In-Reply-To: <20151205120222.GA27009@lst.de>

On Sat, 5 Dec 2015 13:02:22 +0100
Christoph Hellwig <hch@lst.de> wrote:

> On Fri, Dec 04, 2015 at 03:51:10PM -0500, Jeff Layton wrote:
> > > There is no reason not to do it, except for the significant effort
> > > to implement it a well as a synthetic test case to actually reproduce
> > > the behavior we want to handle.
> > 
> > Could you end up livelocking here? Suppose you issue the callback and
> > the client returns success. He then returns the layout and gets a new
> > one just before the delay timer pops. We then end up recalling _that_
> > layout...rinse, repeat...
> 
> If we start allowing layoutgets before the whole range has been
> returned there is a great chance for livelocks, yes.  But I don't think
> we should allow layoutgets to proceed before that.

Maybe I didn't describe it well enough. I think you can still end up
looping even if you don't allow LAYOUTGETs before the entire range is
returned.

If we treat NFS4_OK and NFS4ERR_DELAY equivalently, then we're
expecting the client to eventually return NFS4ERR_NOMATCHING_LAYOUT (or
a different error) to break the cycle of retransmissions. But, HZ/100
is enough time for the client to return a layout and request a new one.
We may never see that error -- only a continual cycle of
CB_LAYOUTRECALL/LAYOUTRETURN/LAYOUTGET.

I think we need a more reliable way to break that cycle so we don't end
up looping like that. We should either cancel any active callbacks
before reallowing LAYOUTGETs, or move the timeout handling outside of
the RPC state machine (like Bruce was suggesting).

-- 
Jeff Layton <jlayton@poochiereds.net>

  reply	other threads:[~2015-12-05 12:24 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-17 11:58 [PATCH RFC] nfsd: serialize layout stateid morphing operations Jeff Layton
2015-10-11 13:15 ` Christoph Hellwig
2015-10-11 20:51   ` Jeff Layton
2015-10-23 19:35     ` J. Bruce Fields
2015-11-29  4:07 ` Kinglong Mee
2015-11-29 13:46   ` Jeff Layton
2015-11-30  2:57     ` Kinglong Mee
2015-11-30 21:34       ` J. Bruce Fields
2015-12-01  0:33         ` Jeff Layton
2015-12-01  0:55           ` Trond Myklebust
2015-12-01 11:56           ` Christoph Hellwig
2015-12-01 22:48             ` Jeff Layton
2015-12-02  7:25               ` Christoph Hellwig
2015-12-03 22:08                 ` J. Bruce Fields
2015-12-04  8:38                   ` Christoph Hellwig
2015-12-04 20:51                     ` Jeff Layton
2015-12-05 12:02                       ` Christoph Hellwig
2015-12-05 12:24                         ` Jeff Layton [this message]
2015-12-06 13:09                           ` Jeff Layton
2015-12-07 13:09                             ` Christoph Hellwig
2015-12-07 13:28                               ` Jeff Layton
2015-12-07 14:17                                 ` Christoph Hellwig
2015-12-07 16:12                                   ` Jeff Layton
2015-12-07 16:43                                     ` J. Bruce Fields
2015-12-16 16:55                             ` J. Bruce Fields
2015-12-07 13:07                           ` Christoph Hellwig

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=20151205072409.46d66109@tlielax.poochiereds.net \
    --to=jlayton@poochiereds.net \
    --cc=bfields@fieldses.org \
    --cc=hch@lst.de \
    --cc=kinglongmee@gmail.com \
    --cc=linux-nfs@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox