All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: linux-nfs@vger.kernel.org
Cc: neilb@suse.de, jlayton@redhat.com
Subject: [PATCH v6 13/14] NFSD: Allocate an rhashtable for nfs4_file objects
Date: Thu, 27 Oct 2022 14:53:00 -0400	[thread overview]
Message-ID: <166689678047.90991.16096403318324605089.stgit@klimt.1015granger.net> (raw)
In-Reply-To: <166689625728.90991.15067635142973595248.stgit@klimt.1015granger.net>

Introduce the infrastructure for managing nfs4_file objects in an
rhashtable. This infrastructure will be used by the next patch.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: NeilBrown <neilb@suse.de>
---
 fs/nfsd/nfs4state.c |   26 +++++++++++++++++++++++++-
 fs/nfsd/state.h     |    1 +
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index a07fbbe289cf..3afb73750d2d 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -44,7 +44,9 @@
 #include <linux/jhash.h>
 #include <linux/string_helpers.h>
 #include <linux/fsnotify.h>
+#include <linux/rhashtable.h>
 #include <linux/nfs_ssc.h>
+
 #include "xdr4.h"
 #include "xdr4cb.h"
 #include "vfs.h"
@@ -721,6 +723,21 @@ static unsigned int file_hashval(const struct svc_fh *fh)
 
 static struct hlist_head file_hashtbl[FILE_HASH_SIZE];
 
+static struct rhltable nfs4_file_rhltable ____cacheline_aligned_in_smp;
+
+static const struct rhashtable_params nfs4_file_rhash_params = {
+	.key_len		= sizeof_field(struct nfs4_file, fi_inode),
+	.key_offset		= offsetof(struct nfs4_file, fi_inode),
+	.head_offset		= offsetof(struct nfs4_file, fi_rlist),
+
+	/*
+	 * Start with a single page hash table to reduce resizing churn
+	 * on light workloads.
+	 */
+	.min_size		= 256,
+	.automatic_shrinking	= true,
+};
+
 /*
  * Check if courtesy clients have conflicting access and resolve it if possible
  *
@@ -8025,10 +8042,16 @@ nfs4_state_start(void)
 {
 	int ret;
 
-	ret = nfsd4_create_callback_queue();
+	ret = rhltable_init(&nfs4_file_rhltable, &nfs4_file_rhash_params);
 	if (ret)
 		return ret;
 
+	ret = nfsd4_create_callback_queue();
+	if (ret) {
+		rhltable_destroy(&nfs4_file_rhltable);
+		return ret;
+	}
+
 	set_max_delegations();
 	return 0;
 }
@@ -8059,6 +8082,7 @@ nfs4_state_shutdown_net(struct net *net)
 
 	nfsd4_client_tracking_exit(net);
 	nfs4_state_destroy_net(net);
+	rhltable_destroy(&nfs4_file_rhltable);
 #ifdef CONFIG_NFSD_V4_2_INTER_SSC
 	nfsd4_ssc_shutdown_umount(nn);
 #endif
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
index e2daef3cc003..190fc7e418a4 100644
--- a/fs/nfsd/state.h
+++ b/fs/nfsd/state.h
@@ -546,6 +546,7 @@ struct nfs4_file {
 	bool			fi_aliased;
 	spinlock_t		fi_lock;
 	struct hlist_node       fi_hash;	/* hash on fi_fhandle */
+	struct rhlist_head	fi_rlist;
 	struct list_head        fi_stateids;
 	union {
 		struct list_head	fi_delegations;



  parent reply	other threads:[~2022-10-27 18:53 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-27 18:51 [PATCH v6 00/14] Series short description Chuck Lever
2022-10-27 18:51 ` [PATCH v6 01/14] NFSD: Pass the target nfsd_file to nfsd_commit() Chuck Lever
2022-10-27 18:51 ` [PATCH v6 02/14] NFSD: Revert "NFSD: NFSv4 CLOSE should release an nfsd_file immediately" Chuck Lever
2022-10-27 18:51 ` [PATCH v6 03/14] NFSD: Add an NFSD_FILE_GC flag to enable nfsd_file garbage collection Chuck Lever
2022-10-27 18:52 ` [PATCH v6 04/14] NFSD: Clean up nfs4_preprocess_stateid_op() call sites Chuck Lever
2022-10-27 18:52 ` [PATCH v6 05/14] NFSD: Trace stateids returned via DELEGRETURN Chuck Lever
2022-10-27 18:52 ` [PATCH v6 06/14] NFSD: Trace delegation revocations Chuck Lever
2022-10-27 18:52 ` [PATCH v6 07/14] NFSD: Use const pointers as parameters to fh_ helpers Chuck Lever
2022-10-27 18:52 ` [PATCH v6 08/14] NFSD: Update file_hashtbl() helpers Chuck Lever
2022-10-27 18:52 ` [PATCH v6 09/14] NFSD: Clean up nfsd4_init_file() Chuck Lever
2022-10-27 23:22   ` NeilBrown
2022-10-27 23:46     ` Chuck Lever III
2022-10-28  0:13       ` NeilBrown
2022-10-27 18:52 ` [PATCH v6 10/14] NFSD: Add a remove_nfs4_file() helper Chuck Lever
2022-10-27 18:52 ` [PATCH v6 11/14] NFSD: Clean up find_or_add_file() Chuck Lever
2022-10-27 18:52 ` [PATCH v6 12/14] NFSD: Refactor find_file() Chuck Lever
2022-10-27 18:53 ` Chuck Lever [this message]
2022-10-27 23:24   ` [PATCH v6 13/14] NFSD: Allocate an rhashtable for nfs4_file objects NeilBrown
2022-10-27 18:53 ` [PATCH v6 14/14] NFSD: Use rhashtable for managing " Chuck Lever
2022-10-27 23:29 ` [PATCH v6 00/14] Series short description NeilBrown

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=166689678047.90991.16096403318324605089.stgit@klimt.1015granger.net \
    --to=chuck.lever@oracle.com \
    --cc=jlayton@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    /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.