From: Simon Wilkinson Date: Mon, 25 Jan 2010 00:02:11 +0000 (+0000) Subject: Linux: Handle llseek failure X-Git-Tag: openafs-devel-1_5_71~26 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=7a5cee30cc5f0e6d5780387633ce2b46608fd5fb;p=packages%2Fo%2Fopenafs.git Linux: Handle llseek failure If llseek fails, then we return immediately, potentially leaving the wrong address space configured for this process, and without resetting the processes saved limits. Fix this by creating a common exit point for osi_rdwr, and using it. Change-Id: Ifff8cb0155f92a4130d21828d5ee2d2a55c09195 Reviewed-on: http://gerrit.openafs.org/1155 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c index c15982307..31ef063fb 100644 --- a/src/afs/LINUX/osi_file.c +++ b/src/afs/LINUX/osi_file.c @@ -387,7 +387,8 @@ osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw) /* seek to the desired position. Return -1 on error. */ if (filp->f_op->llseek) { if (filp->f_op->llseek(filp, (loff_t) uiop->uio_offset, 0) != uiop->uio_offset) - return -1; + code = -1; + goto out; } else filp->f_pos = uiop->uio_offset; @@ -425,6 +426,7 @@ osi_rdwr(struct osi_file *osifile, uio_t * uiop, int rw) code = 0; } +out: if (uiop->uio_seg == AFS_UIOSYS) TO_KERNEL_SPACE();