Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp1709449pxb; Thu, 7 Oct 2021 13:26:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymCTVqkowVp9DAcegu+99YeChjeq1Rk4NoVvnnncp5No5eYlo/gWO0FEC3gz+6in+DzoxJ X-Received: by 2002:a05:6402:3508:: with SMTP id b8mr5399365edd.236.1633638366505; Thu, 07 Oct 2021 13:26:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633638366; cv=none; d=google.com; s=arc-20160816; b=v5od4yiRhBJ6QO3bxtDCTqPfcDdDctS/gNyd7HKKgA9rwYaKyKNWKhWTGPkmwuTeJO Jdfr8OornsTdxSERRb8WAEGZGa6s42ZQa4hAmmoEK1P82FkM52riApjdFw3QK0/m1Iwa Nxxjt8Z4XC00U66/oUoGaGYgQOrSCtGSVA3U/vcc4s/MFX62DGTs7HMU4N+Xaus22OmW o+P1ddRwG+hoOhYMoSE3NAknjziahz1qz9036yHy2PG08NXmRqcaFCarYaD1B5OaL/T1 BIrlksAJWUj+T5hrPOz7Qgmhk4P8mvgfGMSFQQUJJHFMr7XoIRYff4c4NggXCi80FAOn 54hA== 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:subject:cc:to :from; bh=5cbzXKAgAht/spDEezn05uO5EHOdM1QL8zBbWRyfj3Y=; b=AqxKgGVvk7aw41+xjDU+JzVqQ6J2dQpJJa5G4iqDtrWQRy//BYhkdSLtPXCiAD+vyD IkuSqiOj3NMdEk1odjTvS9c0R7Tlb+2tYku8ItNyGtbHbnK+1WhYsPvxAtUdffS/ZQys 7RpAMkdGVwEtKuTMRa2wqp8OSAC7VfGv6xGhVvZDfvrcUMAztsEN4RMw6QVQSKHHVd0O wO8cmqrx7wZKcJ7GRmb+BRbqigaE5wx4Zk8ctxp2R9ETX4jhk5/VB7o8cS3X7j06JQkg Xtw1FBTP9yCChey5gNporQ0goQP9gWd9dFLMxfSLj5fh3B3btnllrY/K9krrSvTfsNVv d6wQ== 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 15si426274ejg.670.2021.10.07.13.25.42; Thu, 07 Oct 2021 13:26:06 -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 S233953AbhJGUTU (ORCPT + 99 others); Thu, 7 Oct 2021 16:19:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:49828 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233019AbhJGUTT (ORCPT ); Thu, 7 Oct 2021 16:19:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6273560EE0; Thu, 7 Oct 2021 20:17:25 +0000 (UTC) From: Chuck Lever To: bfields@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v2 1/2] SUNRPC: Simplify the SVC dispatch code path Date: Thu, 7 Oct 2021 16:17:24 -0400 Message-Id: <163363784431.2295.7425775268719807693.stgit@bazille.1015granger.net> X-Mailer: git-send-email 2.33.0.113.g6c40894d24 In-Reply-To: <163363775944.2295.17512762002999927909.stgit@bazille.1015granger.net> References: <163363775944.2295.17512762002999927909.stgit@bazille.1015granger.net> User-Agent: StGit/1.1+62.ged16 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Developer-Signature: v=1; a=openpgp-sha256; l=3093; h=from:subject:message-id; bh=Bx8EQHVcgEBG6BuCql7S9QqyZaix7P2xw6xFkJjz8YE=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBhX1XUTL0Tob/8SVrwYTSO9tci1tb+ImrGFrF+MQNF zw8t3aqJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYV9V1AAKCRAzarMzb2Z/l2QJEA CjT4UZ95+k9QCBohVPChOo27QMlrQMLvWf4UO/BxxL0T3cawmwyjGS32ftK9yjR5EDJzWfy3IF0cIQ h/YGiRRodQkIebwHDRDNvEMQMaphXfu4nmmlhLEYrNHf++l0idQkXiUIUYft/qYWOrEDvI/OAs/1HG Q+II1JBynl4uAyGoflj058hCLIi+/iuVOiONitq5UG9jYqD4jBMH78qEcmFDXrrnbL78CDc0dzUWKX eUfTAbplhZ5hQO8UnZDiRHy8kLaDKjjM6tMxdNAcTwI7XWAM7TFPhgUgNjnUY1V+g/Ua5ybFSpm5K2 NiFpO+gBBW3spaeNfdvfhuNSYnWUG/PHJ8zn+LxTLx9M39pseywRCISckHqM/DEtTpWPDZTOMAMRV7 u+gPtl1heM7xcxmvkV5pYtWB7qud2zhHha/FJDx6OQKQ/Yfw7wOm2kl6H0iYYD3JzHnziSV6ILkuAU zMl6KpctiAcBTYXqDxTGHjqmsSeK2TcYjUygAHSP03yvwIqOyz4pxpu30om4WrYE5tfI9sxvkULEgQ 6ROc02Du0tosZD5RKVfLH4FWLUvolkAw/6OiQgd0sMt7atxrSPaEjNnKvqj+C796UuXgksTL4kPfkk hWzLlqF/MLtJd0/Wfs8IYEa/CajTJD03dpui0wAlM6ExenWtuEultSDK2/sg== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Micro-optimization: The last user of the generic SVC dispatch code path has been removed, so svc_process_common() can be simplified. This declutters the hot path so that the by-far most common case (a dispatch function exists) is made the /only/ path. Signed-off-by: Chuck Lever --- include/linux/sunrpc/svc.h | 5 +--- net/sunrpc/svc.c | 51 ++------------------------------------------ 2 files changed, 3 insertions(+), 53 deletions(-) diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 6263410c948a..4205a6ef4770 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -443,10 +443,7 @@ struct svc_version { /* Need xprt with congestion control */ bool vs_need_cong_ctrl; - /* Override dispatch function (e.g. when caching replies). - * A return value of 0 means drop the request. - * vs_dispatch == NULL means use default dispatcher. - */ + /* Dispatch function */ int (*vs_dispatch)(struct svc_rqst *, __be32 *); }; diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 08ca797bb8a4..e0dd6e6a4602 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -1186,45 +1186,6 @@ void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {} #endif -static int -svc_generic_dispatch(struct svc_rqst *rqstp, __be32 *statp) -{ - struct kvec *argv = &rqstp->rq_arg.head[0]; - struct kvec *resv = &rqstp->rq_res.head[0]; - const struct svc_procedure *procp = rqstp->rq_procinfo; - - /* - * Decode arguments - * XXX: why do we ignore the return value? - */ - if (procp->pc_decode && - !procp->pc_decode(rqstp, argv->iov_base)) { - *statp = rpc_garbage_args; - return 1; - } - - *statp = procp->pc_func(rqstp); - - if (*statp == rpc_drop_reply || - test_bit(RQ_DROPME, &rqstp->rq_flags)) - return 0; - - if (rqstp->rq_auth_stat != rpc_auth_ok) - return 1; - - if (*statp != rpc_success) - return 1; - - /* Encode reply */ - if (procp->pc_encode && - !procp->pc_encode(rqstp, resv->iov_base + resv->iov_len)) { - dprintk("svc: failed to encode reply\n"); - /* serv->sv_stats->rpcsystemerr++; */ - *statp = rpc_system_err; - } - return 1; -} - __be32 svc_generic_init_request(struct svc_rqst *rqstp, const struct svc_program *progp, @@ -1392,16 +1353,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) svc_reserve_auth(rqstp, procp->pc_xdrressize<<2); /* Call the function that processes the request. */ - if (!process.dispatch) { - if (!svc_generic_dispatch(rqstp, statp)) - goto release_dropit; - if (*statp == rpc_garbage_args) - goto err_garbage; - } else { - dprintk("svc: calling dispatcher\n"); - if (!process.dispatch(rqstp, statp)) - goto release_dropit; /* Release reply info */ - } + if (!process.dispatch(rqstp, statp)) + goto release_dropit; if (rqstp->rq_auth_stat != rpc_auth_ok) goto err_release_bad_auth;