mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 06:50:12 +00:00
c5e3b430d8
When verifying the sanity of host and callback state at startup and shutdown, dafileserver attempts to detect loops in various structures by imposing arbitrary hard-coded limits (e.g. FS_STATE_HCB_MAX_LIST_LEN, 100000 callbacks per host). However, it is possible for AFS clients with heavy RW workloads to legitimately exceed some of these limits, if the dafileserver itself is configured with -cb higher than 100000, for instance. When this occurs, the dafileserver will falsely invalidate the fsstate.dat file at shutdown: "cb_stateVerifyFCBList: error: list length exceeds 100000 (h->index=1); assuming there's a loop" The dafileserver will then refuse to load the invalid fsstate.dat file at startup, defeating the callback preservation feature just when it is most sorely needed - when there are hundreds of thousands of callbacks. These arbitrary limits are unnecessary, since we already know the number of structures we're processing for all of these cases (CBs, FEs, and hosts). So just get rid of the hard-coded limits, and use the actual limit for the relevant structure instead: For CBs and FEs, we can never have more than 'cbstuff.nblks' entries whether we're loading or saving state, so just use that limit for simplicity. For hosts, the number of entries is either in the dump file (when restoring state), or just in our 'hostCount' global (when saving state). To make sure a corrupted state file doesn't cause the host limit to be unreasonably high, impose a new, higher, arbitrary limit on the number of hosts (FS_STATE_H_MAX_LIST_LEN, set to 100M). [adeason@sinenomine.net: Raise limits for _all_ structures.] Change-Id: I525916dc6189b887e4625371e81afac98f12a651 Reviewed-on: https://gerrit.openafs.org/14727 Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Mark Vitale <mvitale@sinenomine.net> Reviewed-by: Andrew Deason <adeason@sinenomine.net> |
||
---|---|---|
build-tools | ||
doc | ||
src | ||
tests | ||
.gitignore | ||
.gitreview | ||
.mailmap | ||
.splintrc | ||
acinclude.m4 | ||
CODING | ||
configure-libafs.ac | ||
configure.ac | ||
CONTRIBUTING | ||
INSTALL | ||
libafsdep | ||
LICENSE | ||
Makefile-libafs.in | ||
Makefile.in | ||
NEWS | ||
NTMakefile | ||
README | ||
README-WINDOWS | ||
regen.sh |
AFS is a distributed file system that enables users to share and access all of the files stored in a network of computers as easily as they access the files stored on their local machines. The file system is called distributed for this exact reason: files can reside on many different machines, but are available to users on every machine. OpenAFS 1.0 was originally released by IBM under the terms of the IBM Public License 1.0 (IPL10). For details on IPL10 see the LICENSE file in this directory. The current OpenAFS distribution is licensed under a combination of the IPL10 and many other licenses as granted by the relevant copyright holders. The LICENSE file in this directory contains more details, thought it is not a comprehensive statement. See INSTALL for information about building and installing OpenAFS on various platforms. See CODING for developer information and guidelines. See NEWS for recent changes to OpenAFS.