OpenAFS Master Repository branch, master, updated. openafs-devel-1_9_1-501-gd822447
Gerrit Code Review
gerrit@openafs.org
Thu, 26 Sep 2024 10:11:47 -0400
The following commit has been merged in the master branch:
commit d822447c272ed4590f73c4b1c847fc7922950d22
Author: Andrew Deason <adeason@dson.org>
Date: Sun May 10 17:02:21 2020 -0500
FBSD: Avoid extra vcache puts in afs_root
Our two 'goto tryagain;' cases in afs_root() have a couple of
refcounting problems:
- If vget() returns an error, but any of the cases in the first if()
statement are true (such as, afs_globalVp does not have CStatd set),
we'll vput() and afs_PutVCache(), but vget() didn't grab a
reference, since it returned an error. So we'll put references we
don't actually have.
- If we enter the first if() block when vget() returns a success, we
vput() the reference we got from vget(), but we also put an
additional reference by calling afs_PutVCache(). If afs_globalVp
still points to this same vcache, this can cause afs_globalVp to
point to a vcache without a ref held for it.
Because of this, if afs_globalVp loses CStatd while we're waiting for
the vnode lock, this can cause the afs_globalVp vcache to not have any
refs held for it, which causes all sorts of other possible problems,
where the usecount for afs_globalVp can drop to 0 when we don't expect
it to.
To fix these issues, remove the extra afs_PutVCache(), and check for
an error from vget() before doing the other afs_globalVp-related
checks.
The relevant code path involved here can be stressed by frequently
causing lookups via /afs/..., while at the same time causing frequent
callback breaks on the root vnode. This can be achieved by using an RW
volume as the root volume (with non-dynroot), and having another
client constantly modify the root directory in that volume while a
FreeBSD client constantly does /afs/... lookups in separate pids.
Thanks to tcreech@tcreech.com for reporting and helping investigate
the relevant issue.
Change-Id: I812d063b3d60ac6eb841863cc7fba3e152393910
Reviewed-on: https://gerrit.openafs.org/14206
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
src/afs/FBSD/osi_vfsops.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--
OpenAFS Master Repository