STABLE14-linux-write-dirty-pages-once-20051015

FIXES 20561

this time for sure, only write back once


(cherry picked from commit 7d0647d5ee9ae0d9b003f0e0c765522aa1433d23)
This commit is contained in:
Chas Williams 2005-10-15 16:52:13 +00:00 committed by Derrick Brashear
parent fbf16a7206
commit d7886b0ba2

View File

@ -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),