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: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=7a5cee30cc5f0e6d5780387633ce2b46608fd5fb;hp=a16e6f396464bd860d08b9fec1f37f96ea8ac30a 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 c159823..31ef063 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();