All of lore.kernel.org
 help / color / mirror / Atom feed
From: dai.ngo@oracle.com
To: "J. Bruce Fields" <bfields@fieldses.org>
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 09:20:02 -0700	[thread overview]
Message-ID: <612ef738-20f6-55f0-1677-cc035ba2fd0d@oracle.com> (raw)
In-Reply-To: <20220329154750.GE29634@fieldses.org>


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      |                            |
>> + * -----------------------------------------------------------------------------
> These are mutually exclusive values, not bits that may set to 0 or 1, so
> the three boolean columns are confusing.  I'd just structure the table
> like:
>
> 	client state	meaning			where set
> 	0		Confirmed, active	Default
> 	CLIENT_COURTESY	Courtesy state....	nfs4_get_client_reaplist
> 	CLIENT_EXPIRED	Courtesy client to be..	nfs4_laundromat
>
> etc.

will fix in v19.

Thanks,
-Dai

>
> --b.
>
>> + */
>> +
>> +enum courtesy_client_state {
>> +	NFSD4_CLIENT_COURTESY = 1,
>> +	NFSD4_CLIENT_EXPIRED,
>> +	NFSD4_CLIENT_RECONNECTED,
>> +};
>> +
>> +/*
>>    * struct nfs4_client - one per client.  Clientids live here.
>>    *
>>    * The initial object created by an NFS client using SETCLIENTID (for NFSv4.0)
>> @@ -385,6 +414,10 @@ struct nfs4_client {
>>   	struct list_head	async_copies;	/* list of async copies */
>>   	spinlock_t		async_lock;	/* lock for async copies */
>>   	atomic_t		cl_cb_inflight;	/* Outstanding callbacks */
>> +
>> +	enum courtesy_client_state	cl_cs_client_state;
>> +	spinlock_t		cl_cs_lock;
>> +	struct list_head	cl_cs_list;
>>   };
>>   
>>   /* struct nfs4_client_reset
>> -- 
>> 2.9.5

  reply	other threads:[~2022-03-29 16:20 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 [this message]
2022-03-29 16:30       ` J. Bruce Fields
2022-03-29 16:42         ` J. Bruce Fields
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=612ef738-20f6-55f0-1677-cc035ba2fd0d@oracle.com \
    --to=dai.ngo@oracle.com \
    --cc=bfields@fieldses.org \
    --cc=chuck.lever@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 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.