From: Chas Williams Date: Sat, 15 Oct 2005 16:52:13 +0000 (+0000) Subject: STABLE14-linux-write-dirty-pages-once-20051015 X-Git-Tag: openafs-stable-1_4_1-rc1~19 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=d7886b0ba213fe53406e487ce291f25b9ee97c6e;p=packages%2Fo%2Fopenafs.git STABLE14-linux-write-dirty-pages-once-20051015 FIXES 20561 this time for sure, only write back once (cherry picked from commit 7d0647d5ee9ae0d9b003f0e0c765522aa1433d23) --- diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 7552bc051..f735cbc94 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -126,12 +126,7 @@ afs_linux_write(struct file *fp, const char *buf, size_t count, loff_t * offp) } ObtainWriteLock(&vcp->lock, 530); - vcp->m.Date = osi_Time(); /* set modification time */ afs_FakeClose(vcp, credp); - if (code >= 0) - code2 = afs_DoPartialWrite(vcp, &treq); - if (code2 && code >= 0) - code = (ssize_t) - code2; ReleaseWriteLock(&vcp->lock); afs_Trace4(afs_iclSetp, CM_TRACE_WRITEOP, ICL_TYPE_POINTER, vcp, @@ -1475,6 +1470,25 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset, ip->i_size = vcp->m.Length; ip->i_blocks = ((vcp->m.Length + 1023) >> 10) << 1; + if (!code) { + struct vrequest treq; + + ObtainWriteLock(&vcp->lock, 533); + vcp->m.Date = osi_Time(); /* set modification time */ + if (!afs_InitReq(&treq, credp)) + code = afs_DoPartialWrite(vcp, &treq); + ReleaseWriteLock(&vcp->lock); + } + if (!code) { + struct vrequest treq; + + ObtainWriteLock(&vcp->lock, 533); + vcp->m.Date = osi_Time(); /* set modification time */ + 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, page_count(pp),