From: Jeff Layton <jlayton@kernel.org>
To: Chuck Lever <chuck.lever@oracle.com>, NeilBrown <neil@brown.name>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
Trond Myklebust <trondmy@kernel.org>,
Anna Schumaker <anna@kernel.org>
Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
Jeff Layton <jlayton@kernel.org>
Subject: [PATCH RFC 2/6] sunrpc: remove special handling of NULL pool from svc_start/stop_kthreads()
Date: Sat, 13 Dec 2025 07:39:14 +0900 [thread overview]
Message-ID: <20251213-nfsd-dynathread-v1-2-de755e59cbc4@kernel.org> (raw)
In-Reply-To: <20251213-nfsd-dynathread-v1-0-de755e59cbc4@kernel.org>
Now that svc_set_num_threads() handles distributing the threads among
the available pools, remove the special handling of a NULL pool pointer
from svc_start_kthreads() and svc_stop_kthreads().
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
net/sunrpc/svc.c | 53 +++++++----------------------------------------------
1 file changed, 7 insertions(+), 46 deletions(-)
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index 3fe5a7f8e57e3fa3837265ec06884b357d5373ff..3484c587a108e6f34e5c23edaf8f3a3c169c9e4a 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -763,53 +763,19 @@ void svc_pool_wake_idle_thread(struct svc_pool *pool)
}
EXPORT_SYMBOL_GPL(svc_pool_wake_idle_thread);
-static struct svc_pool *
-svc_pool_next(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state)
-{
- return pool ? pool : &serv->sv_pools[(*state)++ % serv->sv_nrpools];
-}
-
-static struct svc_pool *
-svc_pool_victim(struct svc_serv *serv, struct svc_pool *target_pool,
- unsigned int *state)
-{
- struct svc_pool *pool;
- unsigned int i;
-
- pool = target_pool;
-
- if (!pool) {
- for (i = 0; i < serv->sv_nrpools; i++) {
- pool = &serv->sv_pools[--(*state) % serv->sv_nrpools];
- if (pool->sp_nrthreads)
- break;
- }
- }
-
- if (pool && pool->sp_nrthreads) {
- set_bit(SP_VICTIM_REMAINS, &pool->sp_flags);
- set_bit(SP_NEED_VICTIM, &pool->sp_flags);
- return pool;
- }
- return NULL;
-}
-
static int
svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
{
struct svc_rqst *rqstp;
struct task_struct *task;
- struct svc_pool *chosen_pool;
- unsigned int state = serv->sv_nrthreads-1;
int node;
int err;
do {
nrservs--;
- chosen_pool = svc_pool_next(serv, pool, &state);
- node = svc_pool_map_get_node(chosen_pool->sp_id);
+ node = svc_pool_map_get_node(pool->sp_id);
- rqstp = svc_prepare_thread(serv, chosen_pool, node);
+ rqstp = svc_prepare_thread(serv, pool, node);
if (!rqstp)
return -ENOMEM;
task = kthread_create_on_node(serv->sv_threadfn, rqstp,
@@ -821,7 +787,7 @@ svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
rqstp->rq_task = task;
if (serv->sv_nrpools > 1)
- svc_pool_map_set_cpumask(task, chosen_pool->sp_id);
+ svc_pool_map_set_cpumask(task, pool->sp_id);
svc_sock_update_bufs(serv);
wake_up_process(task);
@@ -840,16 +806,11 @@ svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
static int
svc_stop_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
{
- unsigned int state = serv->sv_nrthreads-1;
- struct svc_pool *victim;
-
do {
- victim = svc_pool_victim(serv, pool, &state);
- if (!victim)
- break;
- svc_pool_wake_idle_thread(victim);
- wait_on_bit(&victim->sp_flags, SP_VICTIM_REMAINS,
- TASK_IDLE);
+ set_bit(SP_VICTIM_REMAINS, &pool->sp_flags);
+ set_bit(SP_NEED_VICTIM, &pool->sp_flags);
+ svc_pool_wake_idle_thread(pool);
+ wait_on_bit(&pool->sp_flags, SP_VICTIM_REMAINS, TASK_IDLE);
nrservs++;
} while (nrservs < 0);
return 0;
--
2.52.0
next prev parent reply other threads:[~2025-12-12 22:39 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-12 22:39 [PATCH RFC 0/6] nfsd: allow for a dynamically-sized threadpool Jeff Layton
2025-12-12 22:39 ` [PATCH RFC 1/6] sunrpc: split svc_set_num_threads() into two functions Jeff Layton
2025-12-13 19:29 ` Chuck Lever
2025-12-13 21:55 ` Jeff Layton
2025-12-12 22:39 ` Jeff Layton [this message]
2025-12-12 22:39 ` [PATCH RFC 3/6] sunrpc: track the max number of requested threads in a pool Jeff Layton
2025-12-12 22:39 ` [PATCH RFC 4/6] sunrpc: introduce the concept of a minimum number of threads per pool Jeff Layton
2025-12-13 20:19 ` Chuck Lever
2025-12-13 21:38 ` Jeff Layton
2025-12-12 22:39 ` [PATCH RFC 5/6] nfsd: adjust number of running nfsd threads based on activity Jeff Layton
2025-12-13 20:54 ` Chuck Lever
2025-12-13 21:43 ` Jeff Layton
2025-12-12 22:39 ` [PATCH RFC 6/6] nfsd: add controls to set the minimum number of threads per pool Jeff Layton
2025-12-13 21:10 ` Chuck Lever
2025-12-13 21:47 ` Jeff Layton
2025-12-13 19:34 ` [PATCH RFC 0/6] nfsd: allow for a dynamically-sized threadpool Chuck Lever
2025-12-13 21:35 ` Jeff Layton
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=20251213-nfsd-dynathread-v1-2-de755e59cbc4@kernel.org \
--to=jlayton@kernel.org \
--cc=Dai.Ngo@oracle.com \
--cc=anna@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neil@brown.name \
--cc=okorniev@redhat.com \
--cc=tom@talpey.com \
--cc=trondmy@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).