All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: bfields@fieldses.org
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH 02/29] lockd: Create a simplified .vs_dispatch method for NLM requests
Date: Thu, 03 Jun 2021 16:50:46 -0400	[thread overview]
Message-ID: <162275344613.32691.16128075802320636795.stgit@klimt.1015granger.net> (raw)
In-Reply-To: <162275337584.32691.3943139351165347555.stgit@klimt.1015granger.net>

To enable xdr_stream-based encoding and decoding, create a bespoke
RPC dispatch function for the lockd service.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 fs/lockd/svc.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index 1a639e34847d..2de048f80eb8 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -766,6 +766,46 @@ static void __exit exit_nlm(void)
 module_init(init_nlm);
 module_exit(exit_nlm);
 
+/**
+ * nlmsvc_dispatch - Process an NLM Request
+ * @rqstp: incoming request
+ * @statp: pointer to location of accept_stat field in RPC Reply buffer
+ *
+ * Return values:
+ *  %0: Processing complete; do not send a Reply
+ *  %1: Processing complete; send Reply in rqstp->rq_res
+ */
+static int nlmsvc_dispatch(struct svc_rqst *rqstp, __be32 *statp)
+{
+	const struct svc_procedure *procp = rqstp->rq_procinfo;
+	struct kvec *argv = rqstp->rq_arg.head;
+	struct kvec *resv = rqstp->rq_res.head;
+
+	svcxdr_init_decode(rqstp);
+	if (!procp->pc_decode(rqstp, argv->iov_base))
+		goto out_decode_err;
+
+	*statp = procp->pc_func(rqstp);
+	if (*statp == rpc_drop_reply)
+		return 0;
+	if (*statp != rpc_success)
+		return 1;
+
+	svcxdr_init_encode(rqstp);
+	if (!procp->pc_encode(rqstp, resv->iov_base + resv->iov_len))
+		goto out_encode_err;
+
+	return 1;
+
+out_decode_err:
+	*statp = rpc_garbage_args;
+	return 1;
+
+out_encode_err:
+	*statp = rpc_system_err;
+	return 1;
+}
+
 /*
  * Define NLM program and procedures
  */
@@ -775,6 +815,7 @@ static const struct svc_version	nlmsvc_version1 = {
 	.vs_nproc	= 17,
 	.vs_proc	= nlmsvc_procedures,
 	.vs_count	= nlmsvc_version1_count,
+	.vs_dispatch	= nlmsvc_dispatch,
 	.vs_xdrsize	= NLMSVC_XDRSIZE,
 };
 static unsigned int nlmsvc_version3_count[24];
@@ -783,6 +824,7 @@ static const struct svc_version	nlmsvc_version3 = {
 	.vs_nproc	= 24,
 	.vs_proc	= nlmsvc_procedures,
 	.vs_count	= nlmsvc_version3_count,
+	.vs_dispatch	= nlmsvc_dispatch,
 	.vs_xdrsize	= NLMSVC_XDRSIZE,
 };
 #ifdef CONFIG_LOCKD_V4
@@ -792,6 +834,7 @@ static const struct svc_version	nlmsvc_version4 = {
 	.vs_nproc	= 24,
 	.vs_proc	= nlmsvc_procedures4,
 	.vs_count	= nlmsvc_version4_count,
+	.vs_dispatch	= nlmsvc_dispatch,
 	.vs_xdrsize	= NLMSVC_XDRSIZE,
 };
 #endif



  parent reply	other threads:[~2021-06-03 20:50 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-03 20:50 [PATCH 00/29] XDR overhaul for server-side lockd Chuck Lever
2021-06-03 20:50 ` [PATCH 01/29] lockd: Remove stale comments Chuck Lever
2021-06-03 20:50 ` Chuck Lever [this message]
2021-06-03 20:50 ` [PATCH 03/29] lockd: Common NLM XDR helpers Chuck Lever
2021-06-03 20:50 ` [PATCH 04/29] lockd: Update the NLMv1 void argument decoder to use struct xdr_stream Chuck Lever
2021-06-03 20:51 ` [PATCH 05/29] lockd: Update the NLMv1 TEST arguments " Chuck Lever
2021-06-03 20:51 ` [PATCH 06/29] lockd: Update the NLMv1 LOCK " Chuck Lever
2021-06-03 20:51 ` [PATCH 07/29] lockd: Update the NLMv1 CANCEL " Chuck Lever
2021-06-03 20:51 ` [PATCH 08/29] lockd: Update the NLMv1 UNLOCK " Chuck Lever
2021-06-03 20:51 ` [PATCH 09/29] lockd: Update the NLMv1 nlm_res " Chuck Lever
2021-06-03 20:51 ` [PATCH 10/29] lockd: Update the NLMv1 SM_NOTIFY " Chuck Lever
2021-06-03 20:51 ` [PATCH 11/29] lockd: Update the NLMv1 SHARE " Chuck Lever
2021-06-03 20:51 ` [PATCH 12/29] lockd: Update the NLMv1 FREE_ALL " Chuck Lever
2021-06-03 20:51 ` [PATCH 13/29] lockd: Update the NLMv1 void results encoder " Chuck Lever
2021-06-03 20:51 ` [PATCH 14/29] lockd: Update the NLMv1 TEST " Chuck Lever
2021-06-03 20:52 ` [PATCH 15/29] lockd: Update the NLMv1 nlm_res " Chuck Lever
2021-06-03 20:52 ` [PATCH 16/29] lockd: Update the NLMv1 SHARE " Chuck Lever
2021-06-03 20:52 ` [PATCH 17/29] lockd: Update the NLMv4 void arguments decoder " Chuck Lever
2021-06-03 20:52 ` [PATCH 18/29] lockd: Update the NLMv4 TEST " Chuck Lever
2021-06-03 20:52 ` [PATCH 19/29] lockd: Update the NLMv4 LOCK " Chuck Lever
2021-06-03 20:52 ` [PATCH 20/29] lockd: Update the NLMv4 CANCEL " Chuck Lever
2021-06-03 20:52 ` [PATCH 21/29] lockd: Update the NLMv4 UNLOCK " Chuck Lever
2021-06-03 20:52 ` [PATCH 22/29] lockd: Update the NLMv4 nlm_res " Chuck Lever
2021-06-03 20:52 ` [PATCH 23/29] lockd: Update the NLMv4 SM_NOTIFY " Chuck Lever
2021-06-03 20:52 ` [PATCH 24/29] lockd: Update the NLMv4 SHARE " Chuck Lever
2021-06-03 20:53 ` [PATCH 25/29] lockd: Update the NLMv4 FREE_ALL " Chuck Lever
2021-06-03 20:53 ` [PATCH 26/29] lockd: Update the NLMv4 void results encoder " Chuck Lever
2021-06-03 20:53 ` [PATCH 27/29] lockd: Update the NLMv4 TEST " Chuck Lever
2021-06-03 20:53 ` [PATCH 28/29] lockd: Update the NLMv4 nlm_res " Chuck Lever
2021-06-03 20:53 ` [PATCH 29/29] lockd: Update the NLMv4 SHARE " Chuck Lever
2021-06-16 14:53 ` [PATCH 00/29] XDR overhaul for server-side lockd J. Bruce Fields

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=162275344613.32691.16128075802320636795.stgit@klimt.1015granger.net \
    --to=chuck.lever@oracle.com \
    --cc=bfields@fieldses.org \
    --cc=linux-nfs@vger.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 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.