linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] svcrdma: Select NFSv4.1 backchannel transport based on forward channel
Date: Mon, 21 Jul 2014 11:23:02 -0400	[thread overview]
Message-ID: <20140721152302.GC8438@fieldses.org> (raw)
In-Reply-To: <F69F9045-6ECC-4210-837C-2837AF37D7ED@oracle.com>

On Fri, Jul 18, 2014 at 03:27:10PM -0400, Chuck Lever wrote:
> On Jul 18, 2014, at 3:12 PM, J. Bruce Fields <bfields@fieldses.org> wrote:
> > Either that or send the original CREATE_SESSION over the connection you
> > want used for the backchannel, then send a BIND_CONNECTION_TO_SESSION
> > over the RDMA connection.
> > 
> > That said, if the server knows there's no connection at all that's
> > available for the backchannel, then yes I agree that it should be
> > setting the PATH_DOWN flag:
> 
> I’m trying a fix that sets cl_cb_state = NFSD4_CB_DOWN in
> init_session() if SESSION4_BACK_CHAN is clear.
> 
> From the looks of it, the server is architected to support one and
> only one session per client ID. Is that correct?  Thus it expects
> just one CREATE_SESSION operation per EXCHANGE_ID. Does the server
> enforce this?

No, that would definitely be a bug, if you see it failing to support
multiple sessions per client id, let me know.

BUT we definitely only use one backchannel connection at a time, even if
the client offers us multiple connections over multiple sessions.

> Seems like cl_cb_state really should be a per-session thing for
> NFSv4.1.

All we care about is whether some session has a working backchannel.

The only callback we currently use is CB_RECALL, and it doesn't matter
which session that's sent over.  If we needed to support e.g.
CB_RECALL_SLOT, I think this should change.

> And, while we’re at it, the server should assert
> SEQ4_STATUS_CB_PATH_DOWN_SESSION as well as SEQ4_STATUS_CB_PATH_DOWN.

Looking back at the spec, especially the language about retrying
callbacsk, I think you might be right.  (And then maybe we do need to
track callback status per-session.)  I'm not sure if this has much
practical effect for now.

> > Yes, agreed, I'll take a look--how are you reproducing?
> 
> Prototype Linux client that doesn’t set SESSION4_BACK_CHAN when it does
> CREATE_SESSION. Preparing it for RDMA support.
> 
> You could code a pyNFS test.

OK.  I may not get to this very soon.

> > The
> > nfsd4_probe_callback() should result in NFSD4_CB_DOWN getting set as
> > soon as the workqueue process it.
> 
> Clearing SESSION4_BACK_CHAN squelches nfsd4_probe_callback(), so
> the server never checks in this case.

Oops, you're right.  May as well make that unconditional.

> > In theory there's a race there (I
> > should fix that) in practice I'd normally expect that to run before we
> > process a SEQUENCE request on the new session.
> 
> >> Do you remember what this commit was trying to fix?
> > 
> > It's not a bugfix, just a minor optimization.  We could revert it if
> > need be.
> 
> NP, I just don’t see how it helps to make that assumption, plus it
> doesn’t seem entirely safe.
> 
> My initial question was "why does alloc_client() initialize cl_cb_state
> to NFSD4_CB_UNKNOWN instead of NFSD4_CB_DOWN?”

I don't remember, it could be that we really only need two states.

--b.

      reply	other threads:[~2014-07-21 15:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-16 19:38 [PATCH] svcrdma: Select NFSv4.1 backchannel transport based on forward channel Chuck Lever
2014-07-17 18:36 ` J. Bruce Fields
2014-07-17 18:37   ` J. Bruce Fields
2014-07-17 18:59   ` Chuck Lever
2014-07-18 18:47     ` Chuck Lever
2014-07-18 19:12       ` J. Bruce Fields
2014-07-18 19:27         ` Chuck Lever
2014-07-21 15:23           ` J. Bruce Fields [this message]

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=20140721152302.GC8438@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=chuck.lever@oracle.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;
as well as URLs for NNTP newsgroup(s).