Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Sep 2021 01:40:38 GMT
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 62c5be4ab4c8 - main - nfscl: Add a check for "has acquired a delegation" to nfscl_removedeleg()
Message-ID:  <202109270140.18R1ecnx092132@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=62c5be4ab4c8b8127185286e148638cb8cdf45f4

commit 62c5be4ab4c8b8127185286e148638cb8cdf45f4
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-09-27 01:37:25 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-09-27 01:37:25 +0000

    nfscl: Add a check for "has acquired a delegation" to nfscl_removedeleg()
    
    Commit 5e5ca4c8fc53 added a flag to a NFSv4 mount point that is set when
    the first delegation is acquired from the NFSv4 server.
    
    For a common case where delegations are not being issued by the
    NFSv4 server, the nfscl_removedeleg() code acquires the mutex lock for
    open/lock state, finds the delegation list empty, then just unlocks the
    mutex and returns. This patch adds a check of the flag to avoid the
    need to acquire the mutex for this common case.
    
    This change appears to be performance neutral for a small number
    of opens, but should reduce lock contention for a large number of opens
    for the common case where server is not issuing delegations.
    
    This commit should not affect the high level semantics of delegation
    handling.
    
    MFC after:      2 weeks
---
 sys/fs/nfsclient/nfs_clstate.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index 8ec5b80489f9..ddbfa40300d8 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -4604,6 +4604,12 @@ nfscl_removedeleg(vnode_t vp, NFSPROC_T *p, nfsv4stateid_t *stp)
 	int igotlock = 0, triedrecall = 0, needsrecall, retcnt = 0, islept;
 
 	nmp = VFSTONFS(vp->v_mount);
+	NFSLOCKMNT(nmp);
+	if ((nmp->nm_privflag & NFSMNTP_DELEGISSUED) == 0) {
+		NFSUNLOCKMNT(nmp);
+		return (retcnt);
+	}
+	NFSUNLOCKMNT(nmp);
 	np = VTONFS(vp);
 	NFSLOCKCLSTATE();
 	/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109270140.18R1ecnx092132>