aboutsummaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2002-04-07 07:17:59 +0000
committerAlan Cox <alc@FreeBSD.org>2002-04-07 07:17:59 +0000
commitae124fc4bd53d4f7fe057f9a37d6254bd38f1c8b (patch)
tree1d52e68d68cf13695d60589d61679d7827f3f7b8 /sys/kern
parente3bcba78792907dc364b969f2ea953d2721748f0 (diff)
downloadsrc-ae124fc4bd53d4f7fe057f9a37d6254bd38f1c8b.tar.gz
src-ae124fc4bd53d4f7fe057f9a37d6254bd38f1c8b.zip
Reduce the duplication of code for error handling in _aio_aqueue().
Notes
Notes: svn path=/head/; revision=94035
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_aio.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index f22152a8da3b..a2728131977f 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -1387,22 +1387,14 @@ _aio_aqueue(struct thread *td, struct aiocb *job, struct aio_liojob *lj, int typ
fhold(fp);
if (aiocbe->uaiocb.aio_offset == -1LL) {
- fdrop(fp, td);
- uma_zfree(aiocb_zone, aiocbe);
- if (type == 0)
- suword(&job->_aiocb_private.error, EINVAL);
- return EINVAL;
+ error = EINVAL;
+ goto aqueue_fail;
}
-
error = suword(&job->_aiocb_private.kernelinfo, jobrefid);
if (error) {
- fdrop(fp, td);
- uma_zfree(aiocb_zone, aiocbe);
- if (type == 0)
- suword(&job->_aiocb_private.error, EINVAL);
- return error;
+ error = EINVAL;
+ goto aqueue_fail;
}
-
aiocbe->uaiocb._aiocb_private.kernelinfo = (void *)(intptr_t)jobrefid;
if (jobrefid == LONG_MAX)
jobrefid = 1;
@@ -1419,15 +1411,11 @@ _aio_aqueue(struct thread *td, struct aiocb *job, struct aio_liojob *lj, int typ
}
return 0;
}
-
if ((opcode != LIO_READ) && (opcode != LIO_WRITE)) {
- fdrop(fp, td);
- uma_zfree(aiocb_zone, aiocbe);
- if (type == 0) {
+ if (type == 0)
suword(&job->_aiocb_private.status, 0);
- suword(&job->_aiocb_private.error, EINVAL);
- }
- return EINVAL;
+ error = EINVAL;
+ goto aqueue_fail;
}
if (aiocbe->uaiocb.aio_sigevent.sigev_notify == SIGEV_KEVENT) {