Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp3521904pxb; Wed, 13 Oct 2021 07:41:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqW1iYn8piudkOCHtEf11VCo9av14xw+CzJOX4lxthiV/gNiAt7PkIHaE6et2gnYPXVNfc X-Received: by 2002:a63:bf45:: with SMTP id i5mr27850149pgo.161.1634136092200; Wed, 13 Oct 2021 07:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634136092; cv=none; d=google.com; s=arc-20160816; b=h4lrpfSG5vgiQjEo9aACkxxMxp4CUH/sQ9SxIYNznCAKidEAaU7f54Gz6/PNBi0Bob RStc8eLBBz6EtxfE/CGvN6nEyTy6YNXLiEkZ/JzMlSJ2lq/jPjFIdmqOxHeyO9DOMGEg OvnQS6EuY4+pi5zB92MRlxx9HCiZdtgo+FcxOkdLJG+F4CVU9UPMInsur+U4qNXsWmA7 1xB84VgxQF7oWthYkBx5Y7hEnqvyraHqTp0d30SXhWl1XS3ZkkKXQ3MH+mUXMsgiHQlY MY0xs1WmrPIwiRcoIG1m3y/4bQtrZxz+wDlHRPvZobwxocP6JqLaroG0VqOeyQGYhE82 rdYA== 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=inpbC7LsGWGQshG7m7WIW19NFI/Gw72d4qzCIMvsRx4=; b=wNY7aaHxTdBDCJzdbr/wM0+/watq5uyBiKvNm4WeMeH4WOJuEiVoGjdqhXRSeLsSLV EInjEGTr7Bf8tu6creTXWgNMILharmVOldYTbe+GrkI2qVsEF9CF9FOApItpojx2HI4G 0vKmWGWaV8zBGE118Q39/yZmbUlPOC6vY1RN6GocYwyY5mqkEjLaTo47nOfco5PKuueJ 9YFgKmXCivccvEOLcfNBNfgAHjwfrhUtDDNXneq8tOjmj+c8mkL/3DwYxl9mrzhi7eNv komX89brCACRJBWWqrG26z1yqp2eNmuW/k04rqAjZw08Z2Ort0gvoFR2ch9c2nmOJgIz i6Ag== 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 ep3si8597506pjb.8.2021.10.13.07.41.12; Wed, 13 Oct 2021 07:41:32 -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 S236315AbhJMOnE (ORCPT + 99 others); Wed, 13 Oct 2021 10:43:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:50398 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230015AbhJMOnE (ORCPT ); Wed, 13 Oct 2021 10:43:04 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B9C026112D; Wed, 13 Oct 2021 14:41:00 +0000 (UTC) From: Chuck Lever To: bfields@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v1 1/3] NFSD: Save location of NFSv4 COMPOUND status Date: Wed, 13 Oct 2021 10:40:59 -0400 Message-Id: <163413605956.5966.9433907577871478748.stgit@bazille.1015granger.net> X-Mailer: git-send-email 2.33.0.113.g6c40894d24 In-Reply-To: <163413598146.5966.14139533676554616065.stgit@bazille.1015granger.net> References: <163413598146.5966.14139533676554616065.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=2172; h=from:subject:message-id; bh=GkaRRyqGP/lPfvswDDgGdJJjDZcGuM4BivIHqor7dDM=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBhZu/7+l+V2uMCcDa9gymPHm+IzHO78/SY1235yQS0 OoLxFWCJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYWbv+wAKCRAzarMzb2Z/l1pPEA C0KDxxIxQcUEELlu+2jfAfO0XdR9XZR8IDv0W64FRZzSfCcrGFrfbFrj07dU0EEGvWdI0Mp3/HhtCB ebXuSWxSFOsT7JcWB2iCpbFkeGt/CyN0KLAuOFWHr2uurNGi71EiO9INS7FkRfaz0uw7K4zBk1L5BA UVNKktMgJswc8FutHtLpLfzfF3z10tZ8T6SuyqLlUByPcOldP1svxGEbyF58DDOpttSIbysR8G/V4/ aUtKn6dNk6DAalEh0B0Qf8JCclYwbIiZVVIznMlOWY2uTDWi8tX1sTxq+O1wXuXSdMjkIxH8WWmKKV UKm8FfGPoY1ZRsA8GXEeJlYXJSdIfEdn3d2mlQ2raumGwg00lFEEPYARu3246IFM1N4AfQYULVilel /M6zy1N4pfZJBIVbMmOm1ivBQlZtJ1nmoOLg6C3Q8rCGcZFu47QENQAJuYHtBCNIgfSz/unRZDY3Bj 1o0W0SYYxGY9fcbrQv0QYvkYreRCMBxenWsKy0i7EGCtkDKPwqq5GjjrP9G+4Igg/q6QHl81J2vwK3 f/6HHR1W3xVuUd5znjufxI6YcyblKXf1MkxcPC2KYSv8Jo3cswwdmKV1Adw97MULFyjA6GcVXPQquc iOJ7pHw1G/tkaE/+5s961NZf5hYNzifaSjO9c+x+Ch/gDfpea2BfPe/rp6pQ== 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 Refactor: Currently nfs4svc_encode_compoundres() relies on the NFS dispatcher to pass in the buffer location of the COMPOUND status. Instead, save that buffer location in struct nfsd4_compoundres. The compound tag follows immediately after. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfs4xdr.c | 9 +++++++-- fs/nfsd/xdr4.h | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 55c9551fa74e..7bc306ee3e59 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -2461,11 +2461,11 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) __be32 status; resp->xdr = &rqstp->rq_res_stream; + resp->statusp = resp->xdr->p; /* reserve space for: NFS status code */ xdr_reserve_space(resp->xdr, XDR_UNIT); - resp->tagp = resp->xdr->p; /* reserve space for: taglen, tag, and opcnt */ xdr_reserve_space(resp->xdr, XDR_UNIT * 2 + args->taglen); resp->taglen = args->taglen; diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9099f489f60d..8623aea38d58 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -5435,11 +5435,16 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p) WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len + buf->tail[0].iov_len); - *p = resp->cstate.status; + /* + * Send buffer space for the following items is reserved + * at the top of nfsd4_proc_compound(). + */ + p = resp->statusp; + + *p++ = resp->cstate.status; rqstp->rq_next_page = resp->xdr->page_ptr + 1; - p = resp->tagp; *p++ = htonl(resp->taglen); memcpy(p, resp->tag, resp->taglen); p += XDR_QUADLEN(resp->taglen); diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 8812256cd520..6aeb6755278f 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -702,10 +702,11 @@ struct nfsd4_compoundres { struct xdr_stream *xdr; struct svc_rqst * rqstp; + __be32 *statusp; u32 taglen; char * tag; u32 opcnt; - __be32 * tagp; /* tag, opcount encode location */ + struct nfsd4_compound_state cstate; };