From ed8d83e0f6b9825503643d1ee8398b2310946dd7 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Fri, 23 Oct 2009 12:42:19 +0100 Subject: [PATCH] Resolve error return issues in writepage The writepage_sync changes get error returns wrong in a couple of places. In particular, they return a 0 code from dopartialwrite in preference to the length return from page_writeback Change-Id: I34a848fed5f799aa6844e9ef0339321f91c7e59b Reviewed-on: http://gerrit.openafs.org/721 Reviewed-by: Marc Dionne Tested-by: Simon Wilkinson Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/afs/LINUX/osi_vnodeops.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 7067384..ae26fa2 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1997,7 +1997,7 @@ afs_linux_prepare_writeback(struct vcache *avc) { static inline int afs_linux_dopartialwrite(struct vcache *avc, cred_t *credp) { struct vrequest treq; - int code; + int code = 0; if (!afs_InitReq(&treq, credp)) code = afs_DoPartialWrite(avc, &treq); @@ -2058,6 +2058,7 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp, unsigned long offset, unsigned int count) { int code; + int code1 = 0; struct vcache *vcp = VTOAFS(ip); cred_t *credp; @@ -2081,14 +2082,17 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp, afs_maybe_lock_kernel(); AFS_GLOCK(); ObtainWriteLock(&vcp->lock, 533); - if (code == 0) - code = afs_linux_dopartialwrite(vcp, credp); + if (code > 0) + code1 = afs_linux_dopartialwrite(vcp, credp); afs_linux_complete_writeback(vcp); ReleaseWriteLock(&vcp->lock); AFS_GUNLOCK(); afs_maybe_unlock_kernel(); crfree(credp); + if (code1) + return code1; + return code; } -- 1.7.1