afs_DoPartialWrite(struct vcache *avc, struct vrequest *areq)
{
afs_int32 code;
+ int sync;
if (afs_stats_cmperf.cacheCurrDirtyChunks <=
afs_stats_cmperf.cacheMaxDirtyChunks
afs_Trace2(afs_iclSetp, CM_TRACE_PARTIALWRITE, ICL_TYPE_POINTER, avc,
ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(avc->f.m.Length));
+ sync = AFS_ASYNC;
#if defined(AFS_SUN5_ENV)
- code = afs_StoreAllSegments(avc, areq, AFS_ASYNC | AFS_VMSYNC_INVAL);
-#else
- code = afs_StoreAllSegments(avc, areq, AFS_ASYNC);
+ sync |= AFS_VMSYNC_INVAL;
+#elif defined(AFS_FBSD_ENV)
+ sync |= AFS_NOVMSYNC;
#endif
+ code = afs_StoreAllSegments(avc, areq, sync);
return code;
}
#define AFS_VMSYNC_INVAL 2 /* sync and invalidate pages */
#define AFS_LASTSTORE 4
#define AFS_VMSYNC 8 /* sync pages but do not invalidate */
+#define AFS_NOVMSYNC 16 /* force skipping syncing vm pages; just write afs dcache data */
/* background request structure */
#define BPARMS 4
* on the memcache case since that's we adjust the file's size
* and finish flushing partial vm pages.
*/
- if ((cacheDiskType != AFS_FCACHE_TYPE_MEM) ||
+ if ((sync & AFS_NOVMSYNC)) {
+ /* noop */
+
+ } else if ((cacheDiskType != AFS_FCACHE_TYPE_MEM) ||
(sync & AFS_VMSYNC_INVAL) || (sync & AFS_VMSYNC) ||
(sync & AFS_LASTSTORE))
#endif /* !AFS_AIX32_ENV && !AFS_SGI65_ENV */