Commit 1bd773b4 authored by NeilBrown's avatar NeilBrown Committed by Chuck Lever
Browse files

nfsd: hold nfsd_mutex across entire netlink operation



Rather than using svc_get() and svc_put() to hold a stable reference to
the nfsd_svc for netlink lookups, simply hold the mutex for the entire
time.

The "entire" time isn't very long, and the mutex is not often contented.

This makes way for us to remove the refcounts of svc, which is more
confusing than useful.

Reported-by: default avatarJeff Layton <jlayton@kernel.org>
Closes: https://lore.kernel.org/linux-nfs/5d9bbb599569ce29f16e4e0eef6b291eda0f375b.camel@kernel.org/T/#u


Fixes: bd9d6a3e ("NFSD: add rpc_status netlink support")
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 2a501f55
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -1515,10 +1515,9 @@ int nfsd_nl_rpc_status_get_start(struct netlink_callback *cb)
	int ret = -ENODEV;

	mutex_lock(&nfsd_mutex);
	if (nn->nfsd_serv) {
		svc_get(nn->nfsd_serv);
	if (nn->nfsd_serv)
		ret = 0;
	}
	else
		mutex_unlock(&nfsd_mutex);

	return ret;
@@ -1691,8 +1690,6 @@ int nfsd_nl_rpc_status_get_dumpit(struct sk_buff *skb,
 */
int nfsd_nl_rpc_status_get_done(struct netlink_callback *cb)
{
	mutex_lock(&nfsd_mutex);
	nfsd_put(sock_net(cb->skb->sk));
	mutex_unlock(&nfsd_mutex);

	return 0;