openafs/ChangeLog

914 lines
39 KiB
Plaintext
Raw Normal View History

commit f8a2aceb05914908b6a9d3e03c75e3a0c5e1a55c
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Tue Dec 22 11:06:42 2020 -0700
afs: Cleanup afsincludes.h indentation
Clean up the indentation of preprocessor statements
Remove commented out code.
Reviewed-on: https://gerrit.openafs.org/14471
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 031ebf43a8d4db79ee1aa9aff571094354c548b1)
Change-Id: I04c86b8ac8735ec50bf955bb418bb81ee5105afd
Reviewed-on: https://gerrit.openafs.org/14931
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 7a03627a64789b6c5fb44def81d4d39df3587d9d
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Tue Dec 22 11:03:33 2020 -0700
afs: Clean up VNOPS/afs_vnops_attrs.c indentation
Clean up the indentation of preprocessor statements, add #endif comments
where helpful.
Clean up whitespace in code indentation.
Reviewed-on: https://gerrit.openafs.org/14470
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 873a5d9e8835b969370f1f031acef60745a0fff8)
Change-Id: Ia3c41652e99c44164dec852b0f8ab2f103e8e3c1
Reviewed-on: https://gerrit.openafs.org/14930
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit f92508b5f7cbf9562f841d226cc9cd9f345c020b
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Wed Dec 23 13:25:31 2020 -0700
afs: Clean up afs_init.c indentation
Clean up the indentation of preprocessor statements, add #endif comments
where helpful.
Clean up whitespace in code indentation.
Reviewed-on: https://gerrit.openafs.org/14469
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit d7469128ceefbd96b61f32f62fd1e11c3674dac8)
Change-Id: Iccf5587e02b3caf0ec6725dc554255366b879d9e
Reviewed-on: https://gerrit.openafs.org/14929
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 97dd85ba97799fe97d424bbdbad9ced6e582ebaa
Author: Mark Vitale <mvitale@sinenomine.net>
Date: Sun May 10 22:13:13 2020 -0400
DARWIN: remove vestigial etap_event_t typedefs
These typedefs have been present since commit
a41175cfbbf4d06ccfe14ae54bef8b7464ecd80b
"initial-darwin-support-20010327"; at least some of this material was
obtained directly from IBM after the initial code import.
Based on research of old Darwin source code and kernel documentation,
the Event Trace Analysis Package (ETAP) was a lock-profiling interface
provided in older versions of Mach and xnu. ETAP was not enabled by
default; the kernel had to be recompiled with certain options to enable
it. Support for ETAP was removed from the xnu tree sometime between
xnu-517 (10.3 Panther) and xnu-792 (10.4 Tiger), although some
references remain in the latter under PPC support (osfmk/ppc/hw_lock.s).
All remaining references to etap_event_t disappeared when PPC support
was removed, some time between xnu-1456.1.26 (10.6 Snow Leopard) and
xnu-1699.24.8 (10.7.2 Lion).
Therefore, it is possible that these typedefs were needed in the past by
(IBM/Transarc) AFS to support use of some lock APIs (e.g.,
simple_lock_init, usimple_lock_init) after the ETAP code was withdrawn
from xnu. However, these typedefs have probably always been vestigial
for OpenAFS, because OpenAFS has never used any lock API that took
etap_event_t as an argument.
Regardless, OpenAFS does not need these definitions to build and run on
any currently supported version of macOS.
Remove the vestigial code.
No functional change should be incurred by this commit.
Reviewed-on: https://gerrit.openafs.org/14219
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Marcio Brito Barbosa <mbarbosa@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 145c90bdbeeff4ea95acacd7dc110f0c6fcba281)
Change-Id: I96cdfe756cb8917079a7cc46d6186e69337caf0d
Reviewed-on: https://gerrit.openafs.org/14928
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 8db804eb1ec3f6a4b41dafff31f4805688a3da60
Author: Andrew Deason <adeason@sinenomine.net>
Date: Thu Jul 18 16:21:10 2019 -0500
afs: Handle osi_NewVnode failures
Currently, code inside afs_vcache.c assumes that osi_NewVnode always
returns non-NULL, which means that osi_NewVnode must panic if it
cannot create a new vnode.
All of the callers of afs_GetVCache, afs_NewVCache, etc, already
handle getting a NULL return, though (after all, the given fid may not
exist or be inaccessible due to network errors, etc). So, just
propagate NULL returns from osi_NewVnode up to our callers, to avoid
panics in these situations.
Modify osi_NewVnode on many arches to return an error on allocation
failure, instead of panic'ing.
Reviewed-on: https://gerrit.openafs.org/13701
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Yadavendra Yadav <yadayada@in.ibm.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit ea9e5e8519dc486cfb019447ee5d695de104079d)
Change-Id: I2a3c5aac44a57093caee4008b86420ed05c66eb7
Reviewed-on: https://gerrit.openafs.org/14927
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit dfc2626e2aac0904c954915ed1d474030414cb78
Author: Mark Vitale <mvitale@sinenomine.net>
Date: Fri Oct 5 10:39:23 2018 -0400
rx: remove rx_atomic bitops
The rx_atomic bitops were introduced with commit
1839cdbe268f4b19ac8e81ae78548f5c78e0c641 ("rx: atomic bit ops").
The last (only) reference to them was recently removed with commit
5ced6025b9f11fadbdf2e092bf40cc87499ed277 ("rx: Convert rxinit_status to
rx_IsRunning()").
Remove the now unreferenced bitops. This commit is comprised of partial
or complete reverts of the following commits:
ae4ad509d35 rx: fix rx_atomic warnings under Solaris (partial)
c16423ec4e6 rx: fix atomics on darwin (partial)
9dc6dd9858a rx: Fix AIX test_and_set_bit (complete)
1839cdbe268 rx: atomic bit ops (complete)
Note: The rx_atomic bitops for Linux systems are known to be broken due
to incorrect casting of rx_atomic_t into the unsigned long operand
expected by the native Linux bitops. The failure modes include silent
overruns on little-endian and incorrect results on big-endian. Do not
merely revert this commit in order to bring these bitops back into the
tree.
Reviewed-on: https://gerrit.openafs.org/13390
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit d0dbd0f12119f0e874ba30adec81061ac6ae27c7)
Change-Id: I214ec09c07fb35a4d1dbf9719ec3861bde931638
Reviewed-on: https://gerrit.openafs.org/14926
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit a1c3d3eeab02eb1919bb96c653c4e2aec9e3fdb9
Author: Stephan Wiesand <stephan.wiesand@desy.de>
Date: Sun Oct 10 19:49:56 2021 +0200
Make OpenAFS 1.8.8.1
Update configure version strings for 1.8.8.1. Note that macos kext
can be of form XXXX.YY[.ZZ[(d|a|b|fc)NNN]] where d dev, a alpha,
b beta, f final candidate so we have no way to represent 1.8.8.1.
Switch to 1.8.9 dev 1 for macOS.
Change-Id: I329a48142a6baaedd190d07a1215ba93b0ecce42
Reviewed-on: https://gerrit.openafs.org/14828
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit ef16f671c999a371e50c79bb4e63a05f45f3c86d
Author: Stephan Wiesand <stephan.wiesand@desy.de>
Date: Wed Dec 8 19:18:41 2021 +0100
Update NEWS for 1.8.8.1
Release notes for the 1.8.8.1 point release
Change-Id: I5c1912439464f64a298739f9ba3e55397e86d29a
Reviewed-on: https://gerrit.openafs.org/14852
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit b927414ffc8a14015e663a24245287b093ee77a8
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Tue Nov 16 10:55:30 2021 -0700
LINUX-5.16: Use linux/stdarg.h if available
Global use of the compiler option '-isystem' was removed from the top
level Makefile with Linux commit ('isystem: delete global -isystem
compile option' 04e85bbf7). This results with an error due to not
finding "stdarg.h" when building the openafs kernel module.
.../src/rx/rx_kcommon.h:143:12: fatal error: stdarg.h: No such file or
directory
143 | # include "stdarg.h"
| ^~~~~~~~~~
Linux-5.15, introduced a copy of stdarg.h as 'linux/stdarg.h' in commit
('isystem: ship and use stdarg.h' c0891ac15)
Add a test for the linux/stdarg.h include file and if available, use
"linux/stdarg.h" instead of "stdarg.h" within the Linux kernel module.
Reviewed-on: https://gerrit.openafs.org/14844
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 3daa6e97330d23ae46c4389e4041c61c1a1d76d9)
Change-Id: I6347d09b3ffc73e3524c83830e2f2bbd2958121f
Reviewed-on: https://gerrit.openafs.org/14851
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 1935c63a776620eb7d2173a11cac039223115a19
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Fri Nov 12 14:42:57 2021 -0700
Linux 5.15: Convert osi_Msg macro to a function
With Linux 5.15-prerc1 printk is defined as a macro instead of a
function ("printk: Userspace format indexing support" 33701557)
This change is causing a build failure:
.../src/rx/rx_kernel.h:62:18: error: printk undeclared (first use in
this function); did you mean _printk?
62 | # define osi_Msg printk)(
| ^~~~~~
The definition and use of the osi_Msg and osi_VMsg macros are
unconventional and the C preprocessor is not handling the macro
expansion when printk is itself a macro.
#define osi_Msg printk)(
...
(osi_Msg "%s", x);
Change osi_Msg to a function, and simply replace osi_VMsg with vprintf
since osi_VMsg is only used at one location within user space code.
osi_Msg is implemented in 2 locations, in rx_kcommon for kernel space
and in rx_user for userspace.
Note: The unconventional definitions of osi_Msg/osi_VMsg was historical
and due to older compilers not supporting variadic macros. All of
the currently support platforms should now support variadic functions.
Reviewed-on: https://gerrit.openafs.org/14791
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 22876c8b88f8e5e92f08b230e5e1959499f0c406)
Change-Id: I48a67b2fe79b45403414bb7d962c29c9be07262e
Reviewed-on: https://gerrit.openafs.org/14831
Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 2b326cd96d6ee5140a6ca7e408d1056137edfef9
Author: Mark Vitale <mvitale@sinenomine.net>
Date: Mon Sep 16 01:37:33 2019 -0400
SOLARIS: add autoconfig support for Studio 12.6
Add the canonical install path for Studio 12.6 to the autoconfig test.
Reviewed-on: https://gerrit.openafs.org/13867
Tested-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit fe6798d0d9e4df006ef96612b5c6e07fcc757b7e)
Change-Id: Iad5a43eb22c8a76af6ce7e73d77de913d3c2d8e0
Reviewed-on: https://gerrit.openafs.org/14841
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 3f33dc825ca9bf475547800d6ab0f72d75e98fb1
Author: Cheyenne Wills <cwills@sinenomine.net>
Date: Thu Oct 7 11:15:58 2021 -0600
LINUX 5.14: explicitly set set_page_dirty to default
Linux 5.14 commit: 'mm: require ->set_page_dirty to be explicitly wired
up' (0af573780b0b13) removed calling __set_page_dirty_buffers when the
address_space_operations structure member set_page_dirty was NULL.
A kernel RIP error can occur when the set_page_dirty operation is
requested. (Reproducible by running 'iozone -B -a')
Update the definition for afs_file_aops to explicitly set the
'set_page_dirty' member to '__set_page_dirty_buffers'.
There are no functional changes, since this commit is using the same
function that the Linux kernel was using if set_page_dirty had been
NULL.
Problem originally reported by "Andrej Filipcic"
<andrej.filipcic@ijs.si> in the openafs-info mailing list. The Linux
5.14 commit causing the openafs failure was identified by "Michael Laß"
<lass@mail.upb.de> also on in the openafs-info mailing list.
Note: The declaration for the function '__set_page_dirty_buffers' was
moved from linux/mm.h into linux/buffer_head.h in Linux 2.6.19. Since
this is close to the minimum supported Linux version 2.6.18, we are not
introducing an additional autoconf test to determine which header file
the declaration for __set_page_dirty_buffers resides in.
Reviewed-on: https://gerrit.openafs.org/14826
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Tested-by: Michael Laß <lass@mail.uni-paderborn.de>
Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de>
Tested-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Ralf Brunckhorst <rbrunckhorst@sinenomine.net>
Tested-by: Ralf Brunckhorst <rbrunckhorst@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit ba485a13e965909b63b25103fdf810de381e4977)
Change-Id: Iae61573e5ccf9458646eba4403322536fd86f2bf
Reviewed-on: https://gerrit.openafs.org/14830
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 284850b2f7ce2ca6ebdcb8918acd3ca02ae2c98b
Author: Andrew Deason <adeason@sinenomine.net>
Date: Mon Nov 2 13:11:49 2020 -0600
rx: Reorganize LWP rxi_Sendmsg to use 'goto error'
Our LWP version of rxi_Sendmsg can allocate an fd_set, but we don't
free the fd_set if sendmsg() returns certain errors afterwards.
To make sure we go through the same cleanup code for the different
possible error code paths, reorganize the function to go through a
'goto error'-style destructor. This also makes our return codes a bit
more consistent; we should always return -errno now for errors.
Reviewed-on: https://gerrit.openafs.org/14422
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 7239565b0fea8504deebc5bd43c4fa1ea80fcb17)
Change-Id: I7291ea5f339f26c5c1a64b65893e2cb33ebfe623
Reviewed-on: https://gerrit.openafs.org/14825
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 40e322e73b3abb6ecde322da80afc75a5c941b8c
Author: Andrew Deason <adeason@dson.org>
Date: Sat Apr 25 17:20:54 2020 -0500
rx: Indent ifdef maze in rx_kernel.h
Change-Id: I3a10206234496b9de6f7ddeafebdee8ab10e5546
Reviewed-on: https://gerrit.openafs.org/14161
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 70f3ac5d04a02470366a980224fdf8fadb31b463)
Reviewed-on: https://gerrit.openafs.org/14811
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 7dba3a2059cba3a85f120843ec8dba196df6f160
Author: Benjamin Kaduk <kaduk@mit.edu>
Date: Fri Sep 25 09:22:16 2020 -0700
FBSD: avoid vrefl()
Commit 20dc2832268eb (correctly) introduced changes so that we
avoid interacting with vnodes marked as VI_DOOMED to the extent
possible, but in doing so inadvertendly used the vrefl() KPI that
was only introduced in FreeBSD 11.0.
Rewrite the relevant logic to use the older vref() KPI, at the cost
of a few more unlock/locks, in order to have a single codepath that
works on all supported FreeBSD versions.
Reviewed-on: https://gerrit.openafs.org/14373
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 81ea654494f5c90f67eb54adbb722a95e0d11d82)
Change-Id: Ia48380bb7498fcf5d0b6b68fe153d4459612a3b6
Reviewed-on: https://gerrit.openafs.org/14795
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 66fee093ad98d9b0025b24110e13533fb5c14357
Author: Andrew Deason <adeason@dson.org>
Date: Sun Nov 24 22:36:17 2019 -0600
FBSD: Ignore VI_DOOMED vnodes
Currently on FreeBSD, osi_TryEvictVCache calls vgone() for our vnode
after checking if the given vcache is in use. vgone() then calls our
VOP_RECLAIM operation, which calls afs_vop_reclaim, which calls
afs_FlushVCache to finally actually flush the vcache.
The current approach has at least the following major issues:
- In afs_vop_reclaim, we return success even if afs_FlushVCache()
fails. This allows FreeBSD to reuse the vnode for another file, but
the vnode is still being referenced by our vcache, which is
referenced by the global VLRU and various other structures. This
causes all kinds of weird errors, since we try to use the underlying
vnode for different files.
- After the relevant checks in osi_TryEvictVCache are done, another
thread can acquire a new reference to our vcache (this can happen
while vgone() is running up until the vnode is locked). This new
reference will cause afs_FlushVCache to fail.
- Our afs_vop_reclaim callback is called while the vnode is locked,
and can acquire afs_xvcache. Other code locks the vnode while
afs_xvcache is already held (such as afs_PutVCache -> vrele). This
can lead to deadlocks if two threads try to run these codepaths for
the same vnode at the same time.
- afs_vop_reclaim optionally acquires afs_xvcache based on the return
value of CheckLock(&afs_xvcache). However, CheckLock just returns if
that lock is locked by anyone, not if the current thread holds the
lock. This can result in the rest of the function running without
afs_xvcache actually being held if we drop AFS_GLOCK at any point.
- osi_TryEvictVCache() tries to vn_lock() the target vnode, but we may
already have another vnode locked in the current thread. If the
vnode we're trying to evict is a descendant of a vnode we already
have locked, this can deadlock.
To fix these issues, make some changes to how our vcache management
works on FreeBSD:
- Do not allow anyone to hold a new reference on a VI_DOOMED vnode.
We do this by checking for VI_DOOMED in osi_vnhold, and returning an
error if VI_DOOMED is set.
- In afs_vop_reclaim, panic if afs_FlushVCache fails. With the new
VI_DOOMED check, afs_FlushVCache show now never fail; and if it
somehow does, panic'ing immediately is better than corrupting
various structures and panic'ing later on.
- Move around some of the relevant locking in afs_vop_reclaim to fix
the lock-related issues.
- In osi_TryEvictVCache, don't wait for the vnode lock (LK_NOWAIT);
treat the vnode as "in use" if we can't immediately obtain the lock.
Thanks to tcreech@tcreech.com and kaduk@mit.edu for insight and help
investigating the relevant issues.
FIXES 135041
Reviewed-on: https://gerrit.openafs.org/13972
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 20dc2832268eb81d40e798da0d424c98cf26062c)
Change-Id: I91e464ce2fa90d7baf593c0b813f52f1fc45b481
Reviewed-on: https://gerrit.openafs.org/14794
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 33b672918f1c282c4d74934e132e41357c9a4fdd
Author: Andrew Deason <adeason@dson.org>
Date: Mon Nov 18 23:17:12 2019 -0600
afs: Refactor osi_vnhold/AFS_FAST_HOLD
Make a few changes to osi_vnhold and AFS_FAST_HOLD:
- Currently, the second argument of osi_vnhold ("retry") is never used
by any implementation. Get rid of it.
- AFS_FAST_HOLD() is the same as osi_vnhold(). Get rid of
AFS_FAST_HOLD, and just have all callers use osi_vnhold instead.
- Allow osi_vnhold to return an error, and adjust callers to handle
it.
- Change osi_vnhold to be a real function, instead of a macro, to make
nontrivial implementations less cumbersome.
Most platforms never return an error from osi_vnhold(), so the added
code paths to check the return value of osi_vnhold() will not trigger.
However, this lets us add future commits that do make osi_vnhold()
return an error.
Reviewed-on: https://gerrit.openafs.org/13971
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 13e44b2b200cd99d0df4e03cf6413d3a6915783f)
Change-Id: Ia3e1c4e45a870cd095f90adc66880eb524a10c1f
Reviewed-on: https://gerrit.openafs.org/14793
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 981ed6c25c7640783ffbfd7591c0dfadbc4d0f42
Author: Andrew Deason <adeason@dson.org>
Date: Tue Nov 26 23:39:24 2019 -0600
FBSD: Avoid holding AFS_GLOCK during vinvalbuf
Currently we call vinvalbuf(9) in a few places while holding
AFS_GLOCK, but AFS_GLOCK is a non-sleepable lock (struct mtx), and
vinvalbuf can sleep. This can trigger a panic in some rare conditions,
with the message:
Sleeping thread (tid 100179, pid 95481) owns a non-sleepable lock
To avoid this, drop AFS_GLOCK around a few places that call
vinvalbuf().
Reviewed-on: https://gerrit.openafs.org/13970
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 61993cf45a648906abb865756d5a98d9c2d7cc40)
Change-Id: I1b4d6d7d9d4cd54091cfd8e168a928c08cb643e5
Reviewed-on: https://gerrit.openafs.org/14792
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit f3ce4d55ff8c87d2aab521b501d97f909f1a94d5
Author: Andrew Deason <adeason@dson.org>
Date: Sat Dec 21 18:34:20 2019 -0600
FBSD: Use CK_STAILQ_FOREACH for ifaces on FBSD 12
FreeBSD 12 changed how network interfaces and network addresses are
linked together; we're supposed to use CK_STAILQ_FOREACH to traverse
them now, instead of TAILQ_FOREACH. To try to keep this change
simpler, introduce a new macro, AFS_FBSD_NET_FOREACH, which picks the
right macro to use.
Based on a commit by tcreech@tcreech.com.
Reviewed-on: https://gerrit.openafs.org/13999
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 7c89322c45605c90c8ce27a77695a1c291f0def4)
Change-Id: I1530213a447ecf09dde47987fdd7b3df489dc490
Reviewed-on: https://gerrit.openafs.org/14781
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 20b9f245a1e11377b30db36a2fd2622fd14e7004
Author: Tim Creech <tcreech@tcreech.com>
Date: Sat Dec 21 18:22:40 2019 -0600
FBSD: Add proper locks when traversing net ifaces
When traversing the list of network interfaces, or the list of
addresses for a network interface, we're supposed to lock the relevant
resource with IFNET_RLOCK, if_addr_rlock, or IN_IFADDR_RLOCK. Add
these locks around our code that examines network interfaces, to
avoid issues if the interface or address list changes while we're
traversing them.
While we're doing this, move around some "AFS_DARWIN_ENV ||
AFS_FBSD_ENV" ifdefs, since these were getting a bit hard to read.
This commit adds some duplicated code, but the result should be easier
to follow.
Also for FreeBSD 12, we must be in NET_EPOCH_ENTER when calling
ifa_ifwithnet/rx_ifaddr_withnet (it panics if we don't, with
INVARIANTS). Add the needed NET_EPOCH_ENTER/EXIT calls, but do so a
bit higher up the call stack, since the returned structures are
potentially no longer valid after we NET_EPOCH_EXIT. Since this means
we're calling these in a few places in libafs, create a couple of rx
abstractions (RX_NET_EPOCH_ENTER) to handle the relevant ifdefs.
[adeason@dson.org: Various adjustments to locking calls; splitting up
DARWIN/FBSD ifdefs.]
Reviewed-on: https://gerrit.openafs.org/13998
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 9e98d61ff41709cee8d484be1ecd638a18e2ce0f)
Change-Id: I240d03d892107179f07acf5d76aa49371ef0bec4
Reviewed-on: https://gerrit.openafs.org/14780
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 9b655ef47b75118bd092131fcf5e195e806c0858
Author: Andrew Deason <adeason@dson.org>
Date: Fri Dec 20 21:02:45 2019 -0600
vol: Avoid building devname.c on AFS_NAMEI_ENV
Everything in devname.c is for the inode vol backend, so skip building
it when AFS_NAMEI_ENV is defined.
While we're doing this, alter the #ifdefs inside this file to assume
that we're not on XBSD, DARWIN, or LINUX, since those platforms are
all namei-only.
Reviewed-on: https://gerrit.openafs.org/13995
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 80afdc2adabb098394e1b2178ba301964868befe)
Change-Id: I54a7cc4f845283ff15f7b91d5d3523a1df42c3af
Reviewed-on: https://gerrit.openafs.org/14788
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 259385e6b092fff51682a1d7ef26b311c2a7198a
Author: Andrew Deason <adeason@dson.org>
Date: Fri Dec 20 21:01:13 2019 -0600
vol: Indent ifdef maze in devname.c
Reviewed-on: https://gerrit.openafs.org/13994
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 99eedfdb1659dd48d12542ad063d4711d401e153)
Change-Id: I6db316d3557fb8165b11afb9089fa4c3cded070b
Reviewed-on: https://gerrit.openafs.org/14787
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 65314bc0533810b33dd77f1da23c6420bf03b108
Author: Tim Creech <tcreech@tcreech.com>
Date: Thu Aug 29 21:35:36 2019 -0400
FBSD: Accommodate 12.0's 64-bit inodes
In FreeBSD 12 (see: https://reviews.freebsd.org/rS318736), the layout
of struct dirent changed to allow for 64-bit inodes and a few other
changes. Update our struct min_direct to accommodate, to allow our
readdir() results to be accurate. Without this, readdir() can yield
garbage entries, due to the mismatch in the structure definitions.
Reviewed-on: https://gerrit.openafs.org/13854
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 14cbd02b8a1a4f1d3c30dd4fb2864d35f39a95eb)
Change-Id: I5218fdf315aac71a7cdf488879b88d476f97f2d3
Reviewed-on: https://gerrit.openafs.org/14786
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit c7f45c4d4ecef9298cab9e40fdd7e5a86b4363d5
Author: Tim Creech <tcreech@tcreech.com>
Date: Thu Aug 29 22:12:41 2019 -0400
FBSD: Use VM_CNT_INC/VM_CNT_ADD on FreeBSD 12
r317061 changed where v_vnodein &c are stored. Use the new
VM_CNT_INC/VM_CNT_ADD macros when available to accommodate.
Reviewed-on: https://gerrit.openafs.org/13859
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit e50e5ede55497b0c02647d21905f4134919fbf05)
Change-Id: I099fbfc91640c411ac582141a926e0eae7ce80d9
Reviewed-on: https://gerrit.openafs.org/14785
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 59f763ccc0f0e2363af0c743b2306c105d682f62
Author: Tim Creech <tcreech@tcreech.com>
Date: Thu Aug 29 22:13:20 2019 -0400
FBSD: Handle missing LINK_MAX
LINK_MAX was removed in r327598. When we don't have a LINK_MAX, just
use its value from before it was removed (32767).
Reviewed-on: https://gerrit.openafs.org/13860
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 0066f4e9f27fedc4cf4df52eaf10d35ae5c7ad6e)
Change-Id: I9e91c4d892bc6b276065d34bc7220a240d6b6fcd
Reviewed-on: https://gerrit.openafs.org/14784
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit ca7b6324fec6ad54ea7e4a1a1f716bdeeb994a1c
Author: Tim Creech <tcreech@tcreech.com>
Date: Thu Aug 29 21:55:05 2019 -0400
FBSD: Use syscall "helper" functions
syscall_register/syscall_deregister were effectively removed in
r329647. Use syscall_helper_register/syscall_helper_unregister
instead, which have existed since r205321 in FreeBSD 9.
Reviewed-on: https://gerrit.openafs.org/13858
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 2add334454019b4a8fd979fb16da686cf93b56c6)
Change-Id: I68037c7fc8e5a1b399bd49ff7bcccacdfd1a7643
Reviewed-on: https://gerrit.openafs.org/14783
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 7159be738388c6e8f3239539aca81c861ad9f533
Author: Andrew Deason <adeason@dson.org>
Date: Sun Dec 1 15:27:01 2019 -0600
FBSD: Remove support for 8.x and 9.x
According to <https://www.freebsd.org/security/unsupported.html>,
FreeBSD 8.x EoL was on August 1, 2015, and FreeBSD 9.x EoL was on
December 31, 2016. Remove our support for these versions, since they
haven't been supported by FreeBSD itself for a while.
FreeBSD 10.x EoL was on October 31, 2018, which has passed, but was
less than a year ago. So keep 10.x in for now.
Adjust our preprocessor checks accordingly:
- In FBSD-specific dirs, assume AFS_FBSD100_ENV and lower is always
true. Assume __FreeBSD_version is always at least 1000000.
- In non-FBSD dirs, convert AFS_FBSD100_ENV and lower to AFS_FBSD_ENV.
Reviewed-on: https://gerrit.openafs.org/13842
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit a4e9365fff2b0e3daf7e9cf2b40e6027b7dd3a15)
Change-Id: If92991dead88bf8d18b837ef4661731c7fc2edbb
Reviewed-on: https://gerrit.openafs.org/14782
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit a5b8d15925bc73b5cd1ee45f26f3ca302d9e075b
Author: Tim Creech <tcreech@tcreech.com>
Date: Thu Aug 29 21:40:26 2019 -0400
FBSD: Handle malloc/free changes in FBSD 12
FreeBSD 12 (r328417) removed the deprecated compatibility macros
MALLOC and FREE. Convert our users to just use the normal malloc and
free, so we can build.
FreeBSD 12 (r334545) also changed malloc() into a macro, which breaks
our own malloc macro in our hcrypto config.h. To fix this, just undef
malloc, if it's already a macro.
Reviewed-on: https://gerrit.openafs.org/13856
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 3bc541743b09f408364a946139c524d53056d40a)
Change-Id: I3d2f98dd635480a2eea4e0cdad9c9bb308475695
Reviewed-on: https://gerrit.openafs.org/14773
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Tim Creech <tcreech@tcreech.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
commit 29f30ed16c6db544f020142c11c4296227eebf99
Author: Jeffrey Altman <jaltman@auristor.com>
Date: Fri Oct 2 19:51:06 2020 -0400
rx: compare RX_ACK_TYPE_ACK as a bit-field
The rx_ackPacket.acks array (the SACK table) consists of up to 255
octets. Each octet stores either the value zero (RX_ACK_TYPE_NACK)
or one (RX_ACK_TYPE_ACK). Effectively only bit-zero of each octet
is used.
The rx_ackPacket.acks array cannot be enlarged but one possible
method of encoding the ACK/NACK state for packets when the
window size is greater than 255 is to use bits 1-7 of each
octet.
This change alters the test for ACK vs NACK to be a bit comparison
instead of a equality comparison. This change permits RX to be
compatible with any future use of bits 1-7.
No peer that treats the SACK table as bytes can ever send more
than 255 packets regardless of the advertised receive window.
Therefore, existing peers will never receive a SACK table with
more than 255 packets worth of bits.
Reviewed-on: https://gerrit.openafs.org/14465
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 7739d1e967177686e91a6ea86c73b404515a1c0d)
Change-Id: I59c098414f309bac283017823dff6d491d895db8
Reviewed-on: https://gerrit.openafs.org/14740
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>