Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp572940pxj; Thu, 3 Jun 2021 13:52:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgRDkbyIqRo0FsCWvKFX5rU+MYFH2Y7UG+yy/J5rryVk2ZlIKtd9GonykywjG1qRdaUoYR X-Received: by 2002:a17:906:490:: with SMTP id f16mr1043700eja.541.1622753536107; Thu, 03 Jun 2021 13:52:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622753536; cv=none; d=google.com; s=arc-20160816; b=s2Yie/uoWHvn16QzUGchaE5Ps05JFQvuFN6aviAVfe8W31ainGQot1hK211LAWup1t sGKbiFVg4vkdu2YFrHFhyadxkxVB9/kcdrrXK76XJ1UBSN9Nncx7RR8JvuIUz9lSjrbx /g+gB0m9iQvWSWCQC5oddQynxxYKNrR7KI2xJ7MM2aV5894GK7Z/1URVdaVYF2bdYJ2X EINYZYmAdZdV5XlWK9rwc9ejVVk4fqxVd5DoQUdb2VvFgwsOWchar/Fk26WEL7EYDHgn dZuYKc7+6f+HSaqOuufYnqkcA3VX3wftlidXx9zjtv7nNBZ8FLV4rNPrkwpAozlnbrTZ 2Lsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject; bh=8m2+NABfAA/Oyg5IkX2lwSQsg2xESjgPleYHHf1FS9g=; b=0BuSCXLffKr4lDOwkFwXszipJBYbF/NVjfdLzsKFfUKVaSmAGPUIYfwlewbs2eLzgW vW95AEg3IYDcrnhPFPn7G3qNEnXWJ1uhFRkfS6zcAYAuZod5lu9cjAfoE3LWuC9H4Wvs KDxEmgofqeBhClm1DNnE84Y3I56wkUyk3aGM1aPGDWpADYj0Q1Ja19FFugyXx53dIN3J R2vmAUV5xHTY81DGNXYqmM7ZpWxxzW7Ck9OdNYSgplTyWSiIdXzHlKiqk3Y8ltqJC1no YNGqgj6s8Z+x7U3fDb+HO+5DnmjIl7l9+2DC/glP+6zqxjlJ5CYpkHTqa1g5Ah+lptvt nZTQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t6si2894948eju.144.2021.06.03.13.51.52; Thu, 03 Jun 2021 13:52:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229925AbhFCUwc (ORCPT + 99 others); Thu, 3 Jun 2021 16:52:32 -0400 Received: from mail.kernel.org ([198.145.29.99]:44480 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbhFCUwc (ORCPT ); Thu, 3 Jun 2021 16:52:32 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D0002613BF; Thu, 3 Jun 2021 20:50:46 +0000 (UTC) Subject: [PATCH 02/29] lockd: Create a simplified .vs_dispatch method for NLM requests From: Chuck Lever To: bfields@fieldses.org Cc: linux-nfs@vger.kernel.org Date: Thu, 03 Jun 2021 16:50:46 -0400 Message-ID: <162275344613.32691.16128075802320636795.stgit@klimt.1015granger.net> In-Reply-To: <162275337584.32691.3943139351165347555.stgit@klimt.1015granger.net> References: <162275337584.32691.3943139351165347555.stgit@klimt.1015granger.net> User-Agent: StGit/1.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org To enable xdr_stream-based encoding and decoding, create a bespoke RPC dispatch function for the lockd service. Signed-off-by: Chuck Lever --- 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