From nobody Thu Jul 28 20:20:29 2022 X-Original-To: dev-commits-src-branches@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 4Lv28G0xCMz4Xp35; Thu, 28 Jul 2022 20:20:30 +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 4Lv28G0RGnz3lgp; Thu, 28 Jul 2022 20:20:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1659039630; 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=4OD2Bg95eaE8/hcW/AN9MerVmPx5Ba143Yh7SFGkIms=; b=WOLX4EqoTmd7rhFSWyYf8RpMlluo7PisFEQbuF40Vge+s7Yqczu6KOFZLZIFugavwVPavG 2YcUm5xlqfB4k5L3W4uAOhdKFi9m7IHFzbW6RCdFRxaIscHBEemAD+wO/xRjKk54jvqKu5 lhs9PsQ4luUQyHQV1rpWZTRtKjESBZdQO5qlVMSKECX7/mdNxUsZT9SNBSBJNhJBf7hoU7 qVMEKKbbFhiNt435NxrKsMxsuCU1jv2oZlfta9PiSWzsAgx7VQEmuMNsL0ZnlRxPXrCpX8 o7zs72LMdqPZ1IRhy7rRacXKPwx2OLZOlgGlRmL9xsChKH2VcLIRLRYtQRjECA== 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 4Lv28F6WZbz18Kx; Thu, 28 Jul 2022 20:20:29 +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 26SKKTxX001985; Thu, 28 Jul 2022 20:20:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 26SKKT8U001984; Thu, 28 Jul 2022 20:20:29 GMT (envelope-from git) Date: Thu, 28 Jul 2022 20:20:29 GMT Message-Id: <202207282020.26SKKT8U001984@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Rick Macklem Subject: git: 99ff1bd55733 - stable/13 - nfscl: Do not call nfscl_hasexpired() for NFSv4.1/4.2 List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@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/stable/13 X-Git-Reftype: branch X-Git-Commit: 99ff1bd55733d8fd20f6b70922639fa25b434ce9 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1659039630; 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=4OD2Bg95eaE8/hcW/AN9MerVmPx5Ba143Yh7SFGkIms=; b=bjmjIcDJzhzujshBUUXHvV/aokswfw0mQNCWprDDotqXE7gb62jGehw3E9BLzXSsFaFzOa zeoDsjXkgt5NSu4HdTry4ennjNvJRLmIKpSUZAVBERnCG/bw8MU64qxboMbRae3USs2UUj x+mOPkUhCV7JjCRYtUCo6HTIjsxRNzVyW0R4+KMSXr1jDF9BxZKR0vIWWYdMKucEhCjVcJ IObRev7qnkceTZistXgLykhyly+r+B+tl6P8G3nUF19ieRGeL3lzJC3gM11pquz49gpSqq JS3+KJdJlnAlgjVYhsJm95m072RbpBfLMSKHXTj1jQjkZqF759crGUMXXgrUzA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1659039630; a=rsa-sha256; cv=none; b=BAize0Rj0uAaYrZoc/wX5de25BwI0ZzcEUZ4Flt5MM6n9//DmJJ7A/bH8v0BsaSDknDZJt ebNFN8Ix/ynXdQhs+Dl+VQQ/h2HDJWrHA87Mb0SO0paVxoscveHDvotmuXqV0UluJU3uCU 8tdoZ7rx/0G4usk65Z0R0LFbHD1Bs7dZDekHmOd0YuSOtakQHRmMd5gRiO2Rr6t4S8iTHJ eNMb83hIqmM2c6sQicb0o7o7cXMYawVzis1enP2vDA66bxHVtv5buZ1RBW6fiEU4LbkDS2 SjLEyKeOap/goBtzmqf2pBBhskHba5ba5xbO25fGuc5k6tvZy4NUEULBxgNE9w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=99ff1bd55733d8fd20f6b70922639fa25b434ce9 commit 99ff1bd55733d8fd20f6b70922639fa25b434ce9 Author: Rick Macklem AuthorDate: 2022-07-10 20:56:38 +0000 Commit: Rick Macklem CommitDate: 2022-07-28 20:16:11 +0000 nfscl: Do not call nfscl_hasexpired() for NFSv4.1/4.2 Commit 981ef32230b2 enabled marking of potentially bad session slots when an RPC is interrupted if the "intr" mount option is used. As such, it no longer makes sense to call nfscl_hasexpired() for I/O operations that reply NFSERR_BADSTATEID for NFSv4.1/4.2, which does a full recovery of NFSv4 open state, destroying all byte range locks. Recovery of open state should not be usually needed, since the session slot has been marked potentially bad and, although opens for the process that has been terminated via a signal may be broken, locks for other processes will still be valid. This patch disables calls to nfscl_hasexpired for NFSv4.1/4.2 mounts, when I/O RPCs receive NFSERR_BADSTATEID replies. It does not affect the behaviour of NFSv4.0 mounts nor hard (non "intr") mounts. PR: 260011 (cherry picked from commit 8f4a5fc6bc6c4e9e0739326199d73ee4401ebd58) --- sys/fs/nfsclient/nfs_clrpcops.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c index 05e3ebe5114d..529655cfe5ca 100644 --- a/sys/fs/nfsclient/nfs_clrpcops.c +++ b/sys/fs/nfsclient/nfs_clrpcops.c @@ -1339,8 +1339,12 @@ nfsrpc_setattr(vnode_t vp, struct vattr *vap, NFSACL_T *aclp, error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_setattr"); } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + ((!NFSHASINT(nmp) || !NFSHASNFSV4N(nmp)) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, p); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp) && + NFSHASNFSV4N(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_STALESTATEID || @@ -1601,8 +1605,12 @@ nfsrpc_read(vnode_t vp, struct uio *uiop, struct ucred *cred, error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_read"); } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + ((!NFSHASINT(nmp) || !NFSHASNFSV4N(nmp)) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, p); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp) && + NFSHASNFSV4N(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_STALESTATEID || @@ -1773,8 +1781,12 @@ nfsrpc_write(vnode_t vp, struct uio *uiop, int *iomode, int *must_commit, error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_write"); } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + ((!NFSHASINT(nmp) || !NFSHASNFSV4N(nmp)) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, p); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp) && + NFSHASNFSV4N(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_DELAY || @@ -7186,9 +7198,11 @@ nfsrpc_allocate(vnode_t vp, off_t off, off_t len, struct nfsvattr *nap, error == NFSERR_STALEDONTRECOVER || error == NFSERR_DELAY || error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_allocate"); - } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + } else if ((error == NFSERR_EXPIRED || (!NFSHASINT(nmp) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, p); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_DELAY || @@ -8287,10 +8301,12 @@ nfsrpc_copy_file_range(vnode_t invp, off_t *inoffp, vnode_t outvp, error == NFSERR_STALEDONTRECOVER || error == NFSERR_DELAY || error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_cfr"); - } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + } else if ((error == NFSERR_EXPIRED || (!NFSHASINT(nmp) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, curthread); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_DELAY || @@ -8464,10 +8480,12 @@ nfsrpc_seek(vnode_t vp, off_t *offp, bool *eofp, int content, error == NFSERR_STALEDONTRECOVER || error == NFSERR_DELAY || error == NFSERR_OLDSTATEID || error == NFSERR_BADSESSION) { (void) nfs_catnap(PZERO, error, "nfs_seek"); - } else if ((error == NFSERR_EXPIRED || - error == NFSERR_BADSTATEID) && clidrev != 0) { + } else if ((error == NFSERR_EXPIRED || (!NFSHASINT(nmp) && + error == NFSERR_BADSTATEID)) && clidrev != 0) { expireret = nfscl_hasexpired(nmp->nm_clp, clidrev, curthread); + } else if (error == NFSERR_BADSTATEID && NFSHASINT(nmp)) { + error = EIO; } retrycnt++; } while (error == NFSERR_GRACE || error == NFSERR_STALESTATEID ||