avc->states |= CDirty;
tvec = (struct iovec *)osi_AllocSmallSpace(sizeof(struct iovec));
while (totalLength > 0) {
- /* Read the cached info. If we call GetDCache while the cache
- * truncate daemon is running we risk overflowing the disk cache.
- * Instead we check for an existing cache slot. If we cannot
- * find an existing slot we wait for the cache to drain
- * before calling GetDCache.
+ /*
+ * The following line is necessary because afs_GetDCache with
+ * flag == 4 expects the length field to be filled. It decides
+ * from this whether it's necessary to fetch data into the chunk
+ * before writing or not (when the whole chunk is overwritten!).
*/
+ len = totalLength; /* write this amount by default */
if (noLock) {
tdc = afs_FindDCache(avc, filePos);
if (tdc)