[OpenAFS] GiveUpAllCallBacks callers

Derrick Brashear shadow@gmail.com
Mon, 13 Dec 2010 14:52:19 -0500


On March 4, 2003, a delta which is git commit
30f3ae458cb8ad84ceb1a8e2c6acc45af535d08e (a.k.a.
new-giveup-all-callbacks-rpc-20030303) introduced
RXAFS_GiveUpAllCallBacks.

This function had a defect in that the global host lock was not held
by the server while the host list was manipulated, and in some cases
the host list was
corrupted. The function was not present in any 1.2 releases, however
was included in 1.4.0 and was not fixed until 1.4.6, with, in that
case, commit
c9263a258a0aeb91d6ad27daa87cee67616874bc (a.k.a.
STABLE146-giveupallcallbacks-locking-20071121) which landed on
December 13, 2007.

The change at http://gerrit.openafs.org/3404 would greatly increase
client shutdown performance as well as taking some pressure off server
callback
utilization by allowing clients to relinquish callbacks to all servers
in a single "multi-Rx" call. The drawback is that as there is no way
with current RPCs
to know what server version is running, sites running 1.4.0 through
1.4.5 would risk host list corruption and potentially a crash.

An alternate version of 3404, patchset one, includes an implementation
which cheats, namely, within a few months of GiveUpAllCallBacks being
fixed,
the GetStatistics64 RPC was introduced. Its existance would be used as
a sentinel that GiveUpAllCallBacks was safe to issue. However, this
was
objected to as it ties unrelated RPCs together.

Before this code appears in any release, comment would be welcome,
appropriate and desired.

-- 
Derrick