LICENSE IPL10
FIXES 117499
This patch makes several alterations to the DAFS volserver. The two
major changes are:
* a potential information leak whereby random heap contents could be
exported over the four listvolume rpc variants is corrected
* volume online/offline reporting correctly reports in several additional
corner cases (see the comments in FillVolInfo() in src/volser/volprocs.c
for the complete list of cases):
VOL_STATE_SALVSYNC_REQ:
exclusive state while a fileserver is busy requesting a demand
salvage over the SALVSYNC protocol
V_needsSalvaged():
volume disk header field which is asserted when the fileserver
detects that a volume needs to be salvaged
pending volume operation with command code FSYNC_VOL_OFF:
this command code indicates that a volume utility requires
exclusive access to the volume
pending volume operation and VVolOpLeaveOnline_r returned false:
this indicates that a volume operation is in-progress, and the
internal function VVolOpLeaveOnline_r has decided that the volume
cannot be served concurrently with this volume transaction
LICENSE IPL10
FIXES 117470
Under certain demand salvage scenarios, it is possible for a stale header
to remain cached with the needsSalvaged flag asserted. Although this will
not affect clients accessing the volume over afsint, it is an issue for
volser clients. VAttachVolumeByName in volser will always attempt to pull
the header over FSSYNC before doing a disk read, under the assumption that
a cached entry in the fileserver will be more current than what is on
disk. This patch causes the fileserver to aggresively invalidate disk
header cache entries when a salvage is in-progress.
LICENSE MIT
When a local directory update occurs to the directory pages stored
in the dcache, there is no guarrantee that the same modifications
will be made to the cached pages as are being made by the file server.
In the situation that one or more of the cached pages are recycled,
it is not permissible to obtain the missing pages from the file server
without first invalidating the rest of the cached pages. This is
necessary to prevent mixing of incompatible data representations.
Define a new flag CM_SCACHEFLAG_LOCAL which is used to indicate that
dcache entries were locally modified even though they are not dirty.
As the previous code could have corrupted the contents of the dcache,
bump CM_CONFIG_DATA_VERSION in order to force the rebuilding of the
cache.
Add error CM_ERROR_NOTINCACHE to indicate that a requested directory
page is not present in the cache and will not be created on the fly.
Prefetch all dcache entries for directories and ensure that a consistent
set is being used.
LICENSE MIT
The cm_serverRef_t list reference counts were undercounting and
prematurely freeing the server lists for volumes that experienced
VNOVOL and VMOVED errors. cm_Analyze() must release the server
list before forcibly updating the volume location info. Otherwise,
the list that gets freed is the old one concatenated with the new
one.
Add more trace messages.
LICENSE MIT
if we are going to use hot threads it would be useful if there were
some additional server threads available to become listeners as
needed.
LICENSE MIT
A small patch to permit the directory package to allocate additional
directory pages when adding new entries that do not fit in the pages
that were obtained from the file server.
LICENSE MIT
Modify MSG_SERVER_REPORTS_VNOVOL to mention that the volume may
have been moved or deleted.
In cm_Analyze(), do not call cm_ForceUpdateVolume() or force a retry
when processing CM_ERROR_NOSUCHVOLUME. This CM error value is the
result of a VNOVOL already being processed which would have forced
the update.
When a VMOVED or VNOVOL error is received, remove the volume id from
the server's volume list.
If cm_ForceUpdateVolume() returns a failure, do not retry if a
VMOVED or VNOVOL error was received.
Make sure that if a cm_serverRef_t object is marked srv_deleted
that its references not be used.
Now that cm_ForceUpdateVolume() is being called only when processing
VMOVED and VNOVOL errors, permit it to call cm_UpdateVolumeLocation()
immediately.
Refactor cm_CheckOfflineVolume() to reduce code duplication.
LICENSE MIT
fs flushall, fs flushvolume, and fs flush should tear down directory
B+ trees so that when the data buffers are re-read from the file server
with the same data version, the B+ trees will be rebuilt.
LICENSE MIT
Disable rx jumbo by default. Permit rx jumbo to be enabled with
registry value "RxJumbo" set to 1 or "RxNoJumbo" set to 0.
RxNoJumbo has priority.
LICENSE MIT
Permit rx_multi check server to be toggled via a registry setting
at checked prior to each invocation. "MultiCheckServers".
Default is on.
Remove volume status updates for vldb server status changes.
LICENSE MIT
force a volume location update upon receipt of a VNOVOL error
in case the volume was moved. VMOVED is only returned by the file
server if the volume is in the process of being moved. Once it has
been deleted the file server returns VNOVOL.
LICENSE IPL10
FIXES 114555
because rx_Finalize doesn't clean up, we end up reiniting mutexes. use
pthread_once when not in the kernel.
(kernel does not now call rx_Finalize, ever)
LICENSE MIT
add a free list to the cm_cell_t structure. if during cm_GetCellGen()
the cm_SearchCellXXX() calls fail, store the allocated cm_cell_t object
on a free list so that it can be reused for the next request.