linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: dai.ngo@oracle.com
Cc: chuck.lever@oracle.com, jlayton@redhat.com,
	viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH RFC v18 02/11] NFSD: Add courtesy client state, macro and spinlock to support courteous server
Date: Tue, 29 Mar 2022 12:42:30 -0400	[thread overview]
Message-ID: <20220329164230.GA32217@fieldses.org> (raw)
In-Reply-To: <20220329163011.GG29634@fieldses.org>

On Tue, Mar 29, 2022 at 12:30:11PM -0400, J. Bruce Fields wrote:
> On Tue, Mar 29, 2022 at 09:20:02AM -0700, dai.ngo@oracle.com wrote:
> > 
> > On 3/29/22 8:47 AM, J. Bruce Fields wrote:
> > >On Thu, Mar 24, 2022 at 09:34:42PM -0700, Dai Ngo wrote:
> > >>Update nfs4_client to add:
> > >>  . cl_cs_client_state: courtesy client state
> > >>  . cl_cs_lock: spinlock to synchronize access to cl_cs_client_state
> > >>  . cl_cs_list: list used by laundromat to process courtesy clients
> > >>
> > >>Modify alloc_client to initialize these fields.
> > >>
> > >>Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
> > >>---
> > >>  fs/nfsd/nfs4state.c |  2 ++
> > >>  fs/nfsd/nfsd.h      |  1 +
> > >>  fs/nfsd/state.h     | 33 +++++++++++++++++++++++++++++++++
> > >>  3 files changed, 36 insertions(+)
> > >>
> > >>diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > >>index 234e852fcdfa..a65d59510681 100644
> > >>--- a/fs/nfsd/nfs4state.c
> > >>+++ b/fs/nfsd/nfs4state.c
> > >>@@ -2009,12 +2009,14 @@ static struct nfs4_client *alloc_client(struct xdr_netobj name)
> > >>  	INIT_LIST_HEAD(&clp->cl_delegations);
> > >>  	INIT_LIST_HEAD(&clp->cl_lru);
> > >>  	INIT_LIST_HEAD(&clp->cl_revoked);
> > >>+	INIT_LIST_HEAD(&clp->cl_cs_list);
> > >>  #ifdef CONFIG_NFSD_PNFS
> > >>  	INIT_LIST_HEAD(&clp->cl_lo_states);
> > >>  #endif
> > >>  	INIT_LIST_HEAD(&clp->async_copies);
> > >>  	spin_lock_init(&clp->async_lock);
> > >>  	spin_lock_init(&clp->cl_lock);
> > >>+	spin_lock_init(&clp->cl_cs_lock);
> > >>  	rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table");
> > >>  	return clp;
> > >>  err_no_hashtbl:
> > >>diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
> > >>index 4fc1fd639527..23996c6ca75e 100644
> > >>--- a/fs/nfsd/nfsd.h
> > >>+++ b/fs/nfsd/nfsd.h
> > >>@@ -336,6 +336,7 @@ void		nfsd_lockd_shutdown(void);
> > >>  #define COMPOUND_ERR_SLACK_SPACE	16     /* OP_SETATTR */
> > >>  #define NFSD_LAUNDROMAT_MINTIMEOUT      1   /* seconds */
> > >>+#define	NFSD_COURTESY_CLIENT_TIMEOUT	(24 * 60 * 60)	/* seconds */
> > >>  /*
> > >>   * The following attributes are currently not supported by the NFSv4 server:
> > >>diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
> > >>index 95457cfd37fc..40e390abc842 100644
> > >>--- a/fs/nfsd/state.h
> > >>+++ b/fs/nfsd/state.h
> > >>@@ -283,6 +283,35 @@ struct nfsd4_sessionid {
> > >>  #define HEXDIR_LEN     33 /* hex version of 16 byte md5 of cl_name plus '\0' */
> > >>  /*
> > >>+ * CLIENT_  CLIENT_ CLIENT_
> > >>+ * COURTESY EXPIRED RECONNECTED      Meaning                  Where set
> > >>+ * -----------------------------------------------------------------------------
> > >>+ * | false | false | false | Confirmed, active    | Default                    |
> > >>+ * |---------------------------------------------------------------------------|
> > >>+ * | true  | false | false | Courtesy state.      | nfs4_get_client_reaplist   |
> > >>+ * |       |       |       | Lease/lock/share     |                            |
> > >>+ * |       |       |       | reservation conflict |                            |
> > >>+ * |       |       |       | can cause Courtesy   |                            |
> > >>+ * |       |       |       | client to be expired |                            |
> > >>+ * |---------------------------------------------------------------------------|
> > >>+ * | false | true  | false | Courtesy client to be| nfs4_laundromat            |
> > >>+ * |       |       |       | expired by Laundromat| nfsd4_lm_lock_expired      |
> > >>+ * |       |       |       | due to conflict     | nfsd4_discard_courtesy_clnt |
> > >>+ * |       |       |       |                      | nfsd4_expire_courtesy_clnt |
> > >>+ * |---------------------------------------------------------------------------|
> > >>+ * | false | false | true  | Courtesy client      | nfsd4_courtesy_clnt_expired|
> > >>+ * |       |       |       | reconnected,         |                            |
> > >>+ * |       |       |       | becoming active      |                            |
> > >>+ * -----------------------------------------------------------------------------
> 
> By the way, where is a client returned to the normal (0) state?  That
> has to happen at some point.
> 
> How is CLIENT_EXPIRED treated differently from cl_time == 0, and why?
> 
> Why are RECONNECTED clients discarded in so many cases?  (E.g. whenever
> a bind_conn_to_session fails).

A priori I just don't see how it can be right to treat a reconnected
client in any way differently from an normal confirmed client.

Once we've told the client that its lease is still good, we have to
treat it like any other client, don't we?

--b.

  reply	other threads:[~2022-03-29 16:42 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-25  4:34 [PATCH RFC v18 0/11] NFSD: Initial implementation of NFSv4 Courteous Server Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 01/11] fs/lock: add helper locks_owner_has_blockers to check for blockers Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 02/11] NFSD: Add courtesy client state, macro and spinlock to support courteous server Dai Ngo
2022-03-29 15:47   ` J. Bruce Fields
2022-03-29 16:20     ` dai.ngo
2022-03-29 16:30       ` J. Bruce Fields
2022-03-29 16:42         ` J. Bruce Fields [this message]
2022-03-29 18:19         ` dai.ngo
2022-03-29 18:39           ` J. Bruce Fields
2022-03-29 19:32             ` Chuck Lever III
2022-03-29 19:49               ` Bruce Fields
2022-03-29 19:58                 ` Chuck Lever III
2022-03-29 20:01                   ` Bruce Fields
2022-03-29 20:20                     ` Chuck Lever III
2022-03-29 20:50                     ` dai.ngo
2022-03-29 21:45             ` dai.ngo
2022-03-30  0:12               ` J. Bruce Fields
2022-03-30  1:17                 ` dai.ngo
2022-03-30  1:48                   ` J. Bruce Fields
2022-03-25  4:34 ` [PATCH RFC v18 03/11] NFSD: Add lm_lock_expired call out Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 04/11] NFSD: Update nfsd_breaker_owns_lease() to handle courtesy clients Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 05/11] NFSD: Update nfs4_get_vfs_file() to handle courtesy client Dai Ngo
2022-03-29 15:24   ` J. Bruce Fields
2022-03-29 16:06     ` dai.ngo
2022-03-29 16:11       ` J. Bruce Fields
2022-03-25  4:34 ` [PATCH RFC v18 06/11] NFSD: Update find_clp_in_name_tree() " Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 07/11] NFSD: Update find_in_sessionid_hashtbl() " Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 08/11] NFSD: Update find_client_in_id_table() " Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 09/11] NFSD: Refactor nfsd4_laundromat() Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 10/11] NFSD: Update laundromat to handle courtesy clients Dai Ngo
2022-03-25  4:34 ` [PATCH RFC v18 11/11] NFSD: Show state of courtesy clients in client info Dai Ngo

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=20220329164230.GA32217@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=chuck.lever@oracle.com \
    --cc=dai.ngo@oracle.com \
    --cc=jlayton@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /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).