From nobody Tue Apr 05 15:15:08 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 540D31A976CB; Tue, 5 Apr 2022 15:15:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KXrmX1rfnz4mGr; Tue, 5 Apr 2022 15:15:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649171708; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PIIU0j0lH+hFtJZgC1fYLl7si1RvvN1ndH+BXLn7VP8=; b=vh7wjdyyz90XvEDWbn1B/L34ItmasfsG/U4EyZGPMxk09Lw6OLxK1fSRsQEo59DmnaSjlk 7P2X8RYuaf/zCGgEYGYhlKy6lyRAst1Tu3mTdVzuen7+qqhnS2bvniio6QQkYXw4Amp8ai dsFF7xe3uRcmHI0c3QF2YVw3kzcQ2XMa+0EnqPV/Aaj19HL/Ru/MCFcDKbEtM3FjrYs5gl rYtmHm5OpHatYiF6uUdcztrhUXi03CHzdaN2j6yB/0+K4m99fmZIiyA/DCcg3JOzHt/hz8 PGBZIbNibU2VId5t65e8QLO9dv1KyC8UaZ1IjzZ4D5jUvklCCHMOUc6VjlaApg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1F890862; Tue, 5 Apr 2022 15:15:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 235FF8B3073755; Tue, 5 Apr 2022 15:15:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 235FF8ka073754; Tue, 5 Apr 2022 15:15:08 GMT (envelope-from git) Date: Tue, 5 Apr 2022 15:15:08 GMT Message-Id: <202204051515.235FF8ka073754@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Rick Macklem Subject: git: 330aa8acdec7 - main - nfscl: Add support for a NFSv4 AppendWrite RPC List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 330aa8acdec76d00d9e0ca526d421fe25ccf90cf Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649171708; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PIIU0j0lH+hFtJZgC1fYLl7si1RvvN1ndH+BXLn7VP8=; b=MPXiUUfdZ08jXt1p7bXomHS+2l3EPSYt0Jal5bV5TGh2R6WiuuOmuCYmbIAGKBgKe3Ejly OGph9QMJIu9sXGldN/lNjabHra7T7XhumAp8opA4nV9gkcQM2MvgVhTKO/p+8GWTcVKUa7 xT4QYbEJ70aXN3v6/cpLTe+TEV1YDeqqA+MunV4KZKsnB3AMkqzpIcGjaU/9ASgGFUKbTV 51JoGAuQdBU8o22j9Dlu70xaLZkYgxA34wm5ODsYt5+I15v2n+iAh9lmVXBpZZ7NAfiBX+ SmTblPuFflVj+OUxopXaJMArkVuoCmGiT90mXB5fivMdLG6p4EKbK5wSjJ0SPg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1649171708; a=rsa-sha256; cv=none; b=Wrm7w/gQxrVCqELIyDzqAAzNQOtfJS24k63mVPmsZq/SQps1XyoW56fZkrdigxY3qXgsu/ yoHxNeryuSl3H2XDeb7phBKlsBscnQzkAzpOswtOxuaPy6Cz3cEzRPooo5JM+YsqaZUBNI vCDv6tWuq7nmfPMAbWAc6ljK3XnBC+B8JisiLqevqWO22szpchYDLROWDYjxT+bC0Yw1H4 im654QmC8jzC9+/9TnPuAyz8fSI9viXuXZgJ3evL/jkTfx7TryHQpJL9r/EmzzFGJ14JdZ pR8JEBS7wC9BBhO6C2xRXrku5ct0pXo5nPyNCSXdq4sek6SPdLe0nL4oN4qh+w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=330aa8acdec76d00d9e0ca526d421fe25ccf90cf commit 330aa8acdec76d00d9e0ca526d421fe25ccf90cf Author: Rick Macklem AuthorDate: 2022-04-05 15:11:37 +0000 Commit: Rick Macklem CommitDate: 2022-04-05 15:11:37 +0000 nfscl: Add support for a NFSv4 AppendWrite RPC For IO_APPEND VOP_WRITE()s, the code first does a Getattr RPC to acquire the file's size, before it can do the Write RPC. Although NFS does not have an append write operation, an NFSv4 compound can use a Verify operation to check that the client's notion of the file's size is correct before doing the Write operation. This patch prepares the NFSv4 client for such an RPC, which will be added in a future commit. This patch does not cause any semantics change. --- sys/fs/nfs/nfs_commonport.c | 2 +- sys/fs/nfs/nfs_commonsubs.c | 7 ++++--- sys/fs/nfs/nfsport.h | 12 +++++++++--- sys/fs/nfs/nfsproto.h | 5 ++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/sys/fs/nfs/nfs_commonport.c b/sys/fs/nfs/nfs_commonport.c index 4719e7abf8cf..cb47922a34e0 100644 --- a/sys/fs/nfs/nfs_commonport.c +++ b/sys/fs/nfs/nfs_commonport.c @@ -598,7 +598,7 @@ nfssvc_call(struct thread *p, struct nfssvc_args *uap, struct ucred *cred) nfsstatsv1.biocache_readdirs; nfsstatsov1.readdir_bios = nfsstatsv1.readdir_bios; - for (i = 0; i < NFSV42_NPROCS; i++) + for (i = 0; i < NFSV42_OLDNPROCS; i++) nfsstatsov1.rpccnt[i] = nfsstatsv1.rpccnt[i]; nfsstatsov1.rpcretries = diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c index 4be1c415bf67..d3c329a3abc7 100644 --- a/sys/fs/nfs/nfs_commonsubs.c +++ b/sys/fs/nfs/nfs_commonsubs.c @@ -150,7 +150,7 @@ struct nfsv4_opflag nfsv4_opflag[NFSV42_NOPS] = { { 0, 2, 1, 1, LK_EXCLUSIVE, 1, 0 }, /* Setattr */ { 0, 0, 0, 0, LK_EXCLUSIVE, 1, 1 }, /* SetClientID */ { 0, 0, 0, 0, LK_EXCLUSIVE, 1, 1 }, /* SetClientIDConfirm */ - { 0, 1, 0, 0, LK_EXCLUSIVE, 1, 1 }, /* Verify */ + { 0, 2, 0, 0, LK_EXCLUSIVE, 1, 0 }, /* Verify (AppWrite) */ { 0, 2, 1, 1, LK_EXCLUSIVE, 1, 0 }, /* Write */ { 0, 0, 0, 0, LK_EXCLUSIVE, 1, 0 }, /* ReleaseLockOwner */ { 0, 0, 0, 0, LK_EXCLUSIVE, 1, 1 }, /* Backchannel Ctrl */ @@ -215,7 +215,7 @@ static struct nfsrv_lughash *nfsgroupnamehash; static int nfs_bigreply[NFSV42_NPROCS] = { 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 0 }; + 1, 0, 0, 1, 0, 0, 0, 0, 0 }; /* local functions */ static int nfsrv_skipace(struct nfsrv_descript *nd, int *acesizep); @@ -303,6 +303,7 @@ static struct { { NFSV4OP_LOOKUP, 5, "LookupOpen", 10, }, { NFSV4OP_DEALLOCATE, 2, "Deallocate", 10, }, { NFSV4OP_LAYOUTERROR, 1, "LayoutError", 11, }, + { NFSV4OP_VERIFY, 3, "AppendWrite", 11, }, }; /* @@ -312,7 +313,7 @@ static int nfs_bigrequest[NFSV42_NPROCS] = { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0 + 0, 1 }; /* diff --git a/sys/fs/nfs/nfsport.h b/sys/fs/nfs/nfsport.h index 8ac4bc54a5f2..2955ae43de85 100644 --- a/sys/fs/nfs/nfsport.h +++ b/sys/fs/nfs/nfsport.h @@ -424,10 +424,16 @@ /* Do an NFSv4.2 LayoutError. */ #define NFSPROC_LAYOUTERROR 68 +/* Do an NFSv4 Verify+Write. */ +#define NFSPROC_APPENDWRITE 69 + /* * Must be defined as one higher than the last NFSv4.2 Proc# above. */ -#define NFSV42_NPROCS 69 +#define NFSV42_NPROCS 70 + +/* Value of NFSV42_NPROCS for old nfsstats structure. (Always 69) */ +#define NFSV42_OLDNPROCS 69 #endif /* NFS_V3NPROCS */ @@ -456,7 +462,7 @@ struct nfsstatsv1 { uint64_t readlink_bios; uint64_t biocache_readdirs; uint64_t readdir_bios; - uint64_t rpccnt[NFSV42_NPROCS + 11]; + uint64_t rpccnt[NFSV42_NPROCS + 10]; uint64_t rpcretries; uint64_t srvrpccnt[NFSV42_NOPS + NFSV4OP_FAKENOPS + 15]; uint64_t srvlayouts; @@ -521,7 +527,7 @@ struct nfsstatsov1 { uint64_t readlink_bios; uint64_t biocache_readdirs; uint64_t readdir_bios; - uint64_t rpccnt[NFSV42_NPROCS]; + uint64_t rpccnt[NFSV42_OLDNPROCS]; uint64_t rpcretries; uint64_t srvrpccnt[NFSV42_PURENOPS + NFSV4OP_FAKENOPS]; uint64_t reserved_0; diff --git a/sys/fs/nfs/nfsproto.h b/sys/fs/nfs/nfsproto.h index 968cc6a41cc3..2e21a70b5d86 100644 --- a/sys/fs/nfs/nfsproto.h +++ b/sys/fs/nfs/nfsproto.h @@ -405,10 +405,13 @@ /* Do an NFSv4.2 LayoutError. */ #define NFSPROC_LAYOUTERROR 68 +/* Do an NFSv4 Verify+Write. */ +#define NFSPROC_APPENDWRITE 69 + /* * Must be defined as one higher than the last NFSv4.2 Proc# above. */ -#define NFSV42_NPROCS 69 +#define NFSV42_NPROCS 70 #endif /* NFS_V3NPROCS */