From 14dc5dfa08cfe64f9abd3e5d98a5e6dc08f69736 Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Thu, 1 Aug 2002 19:08:13 +0000 Subject: [PATCH] Clean up partial write support on Linux by calling afs_DoPartialWrite from afs_linux_writepage_sync. --- src/afs/LINUX/osi_vnodeops.c | 11 +++++++++++ src/afs/VNOPS/afs_vnop_write.c | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index af16d8d44e..ae11f4ec2a 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1502,13 +1502,24 @@ int afs_linux_writepage_sync(struct inode *ip, struct page *pp, ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), ICL_TYPE_INT32, 99999); + setup_uio(&tuio, &iovec, buffer, base, count, UIO_WRITE, AFS_UIOSYS); code = afs_write(vcp, &tuio, f_flags, credp, 0); vcache2inode(vcp); + if (!code && afs_stats_cmperf.cacheCurrDirtyChunks > + afs_stats_cmperf.cacheMaxDirtyChunks) { + struct vrequest treq; + + ObtainWriteLock(&vcp->lock, 533); + if (!afs_InitReq(&treq, credp)) + code = afs_DoPartialWrite(vcp, &treq); + ReleaseWriteLock(&vcp->lock); + } code = code ? -code : count - tuio.uio_resid; + afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp, ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), diff --git a/src/afs/VNOPS/afs_vnop_write.c b/src/afs/VNOPS/afs_vnop_write.c index b19b244af5..0bb676cd6a 100644 --- a/src/afs/VNOPS/afs_vnop_write.c +++ b/src/afs/VNOPS/afs_vnop_write.c @@ -299,7 +299,7 @@ afs_MemWrite(avc, auio, aio, acred, noLock) #endif ReleaseWriteLock(&tdc->lock); afs_PutDCache(tdc); -#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) +#if !defined(AFS_VM_RDWR_ENV) /* * If write is implemented via VM, afs_DoPartialWrite() is called from * the high-level write op. @@ -618,7 +618,7 @@ afs_UFSWrite(avc, auio, aio, acred, noLock) osi_UFSClose(tfile); ReleaseWriteLock(&tdc->lock); afs_PutDCache(tdc); -#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) +#if !defined(AFS_VM_RDWR_ENV) /* * If write is implemented via VM, afs_DoPartialWrite() is called from * the high-level write op.