Windows: Correct buf_Write data loss errors
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 20 Aug 2009 21:22:08 +0000 (17:22 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Thu, 20 Aug 2009 22:40:29 +0000 (15:40 -0700)
commitdb717c69dad1518043cb317aedb6d082476386f0
tree88431e3e7fa9c1e26ff253a084f5c946ea2d0c71
parent687a40c7c6f3e0391ec1c863113c22f970003b49
Windows: Correct buf_Write data loss errors

buf_Write has two errors in it.  First, if offset at which the
write is supposed to begin does not align with the cm_data.blockSize,
then (offset %blockSize) octets at the end of the write will fail
to be written to the file server.   Second, if there is no knowledge
of the file server's ability to handle RXAFS_StoreData64 calls
and the file server does not support StoreData64 calls, then the
first chunkSize of data will be written to the file server before
the RXGEN_OPCODE error is detected.  In this case a retry using
RXAFS_StoreData is performed but the values of 'nbytes' and 'qdp'
were not reset before the retry.  As a result, the first chunkSize
of data would fail to be written to the file server.

The second problem can reliably occur when connectivity between the
cache manager and the file server is interrupted due to firewall
port mapping closures.  Upon establishing a new rx connection, a
SRXAFSCB_InitCallBackState3 RPC will be issued by the file server
erasing any prior knowledge of the file server's ability to process
64-bit data operations.  If the first 64-bit operation is a
StoreData64, then data loss will occur.

LICENSE MIT

FIXES 125220
FIXES 108199

Reviewed-on: http://gerrit.openafs.org/332
Tested-by: Asanka Herath <asanka@secure-endpoints.com>
Reviewed-by: Asanka Herath <asanka@secure-endpoints.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/afsd/cm_dcache.c