From 7a5cee30cc5f0e6d5780387633ce2b46608fd5fb Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Mon, 25 Jan 2010 00:02:11 +0000 Subject: [PATCH] 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 --- src/afs/LINUX/osi_file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c index c159823075..31ef063fb4 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();