Clean up partial write support on Linux by calling afs_DoPartialWrite
authorChas Williams <chas@cmf.nrl.navy.mil>
Thu, 1 Aug 2002 19:08:13 +0000 (19:08 +0000)
committerNickolai Zeldovich <kolya@mit.edu>
Thu, 1 Aug 2002 19:08:13 +0000 (19:08 +0000)
from afs_linux_writepage_sync.

src/afs/LINUX/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_write.c

index af16d8d..ae11f4e 100644 (file)
@@ -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),
index b19b244..0bb676c 100644 (file)
@@ -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.