Skip to content

Commit

Permalink
NFSD: Remove svc_serv_ops::svo_module
Browse files Browse the repository at this point in the history
struct svc_serv_ops is about to be removed.

Neil Brown says:
> I suspect svo_module can go as well - I don't think the thread is
> ever the thing that primarily keeps a module active.

A random sample of kthread_create() callers shows sunrpc is the only
one that manages module reference count in this way.

Suggested-by: Neil Brown <neilb@suse.de>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
  • Loading branch information
Chuck Lever committed Feb 28, 2022
1 parent c7d7ec8 commit f49169c
Show file tree
Hide file tree
Showing 7 changed files with 4 additions and 20 deletions.
4 changes: 1 addition & 3 deletions fs/lockd/svc.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,7 @@ lockd(void *vrqstp)
dprintk("lockd_down: service stopped\n");

svc_exit_thread(rqstp);

module_put_and_kthread_exit(0);
return 0;
}

static int create_lockd_listener(struct svc_serv *serv, const char *name,
Expand Down Expand Up @@ -352,7 +351,6 @@ static struct notifier_block lockd_inet6addr_notifier = {

static const struct svc_serv_ops lockd_sv_ops = {
.svo_function = lockd,
.svo_module = THIS_MODULE,
};

static int lockd_get(void)
Expand Down
7 changes: 2 additions & 5 deletions fs/nfs/callback.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/freezer.h>
#include <linux/kthread.h>
#include <linux/sunrpc/svcauth_gss.h>
#include <linux/sunrpc/bc_xprt.h>

Expand Down Expand Up @@ -92,8 +91,8 @@ nfs4_callback_svc(void *vrqstp)
continue;
svc_process(rqstp);
}

svc_exit_thread(rqstp);
module_put_and_kthread_exit(0);
return 0;
}

Expand Down Expand Up @@ -136,8 +135,8 @@ nfs41_callback_svc(void *vrqstp)
finish_wait(&serv->sv_cb_waitq, &wq);
}
}

svc_exit_thread(rqstp);
module_put_and_kthread_exit(0);
return 0;
}

Expand Down Expand Up @@ -234,12 +233,10 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv,

static const struct svc_serv_ops nfs40_cb_sv_ops = {
.svo_function = nfs4_callback_svc,
.svo_module = THIS_MODULE,
};
#if defined(CONFIG_NFS_V4_1)
static const struct svc_serv_ops nfs41_cb_sv_ops = {
.svo_function = nfs41_callback_svc,
.svo_module = THIS_MODULE,
};

static const struct svc_serv_ops *nfs4_cb_sv_ops[] = {
Expand Down
1 change: 0 additions & 1 deletion fs/nfs/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -2697,6 +2697,5 @@ static int nfs4_run_state_manager(void *ptr)
allow_signal(SIGKILL);
nfs4_state_manager(clp);
nfs_put_client(clp);
module_put_and_kthread_exit(0);
return 0;
}
3 changes: 0 additions & 3 deletions fs/nfsd/nfssvc.c
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,6 @@ static int nfsd_get_default_max_blksize(void)

static const struct svc_serv_ops nfsd_thread_sv_ops = {
.svo_function = nfsd,
.svo_module = THIS_MODULE,
};

void nfsd_shutdown_threads(struct net *net)
Expand Down Expand Up @@ -1018,8 +1017,6 @@ nfsd(void *vrqstp)
msleep(20);
}

/* Release module */
module_put_and_kthread_exit(0);
return 0;
}

Expand Down
5 changes: 0 additions & 5 deletions include/linux/sunrpc/svc.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,6 @@ struct svc_serv;
struct svc_serv_ops {
/* function for service threads to run */
int (*svo_function)(void *);

/* optional module to count when adding threads.
* Thread function must call module_put_and_kthread_exit() to exit.
*/
struct module *svo_module;
};

/*
Expand Down
2 changes: 1 addition & 1 deletion kernel/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ static inline void add_taint_module(struct module *mod, unsigned flag,

/*
* A thread that wants to hold a reference to a module only while it
* is running can call this to safely exit. nfsd and lockd use this.
* is running can call this to safely exit.
*/
void __noreturn __module_put_and_kthread_exit(struct module *mod, long code)
{
Expand Down
2 changes: 0 additions & 2 deletions net/sunrpc/svc.c
Original file line number Diff line number Diff line change
Expand Up @@ -736,11 +736,9 @@ svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
if (IS_ERR(rqstp))
return PTR_ERR(rqstp);

__module_get(serv->sv_ops->svo_module);
task = kthread_create_on_node(serv->sv_ops->svo_function, rqstp,
node, "%s", serv->sv_name);
if (IS_ERR(task)) {
module_put(serv->sv_ops->svo_module);
svc_exit_thread(rqstp);
return PTR_ERR(task);
}
Expand Down

0 comments on commit f49169c

Please sign in to comment.