summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_generic.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-08-01 02:21:54 +0000
committeralc <alc@FreeBSD.org>2003-08-01 02:21:54 +0000
commit7199d3e24fde7d072d014d516532d1c9751df5b2 (patch)
tree8197602a542d2c698ece4dfc0e8379d74a0194fb /sys/kern/sys_generic.c
parent62a83c402223f5a12dbb7a1aa092e0b45d9f5f40 (diff)
downloadFreeBSD-src-7199d3e24fde7d072d014d516532d1c9751df5b2.zip
FreeBSD-src-7199d3e24fde7d072d014d516532d1c9751df5b2.tar.gz
Remove Giant from writev(2). Eliminate trivial style differences between
writev(2) and readv(2).
Diffstat (limited to 'sys/kern/sys_generic.c')
-rw-r--r--sys/kern/sys_generic.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index e3393f3..eec9c76 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -468,25 +468,20 @@ writev(td, uap)
struct uio ktruio;
#endif
- mtx_lock(&Giant);
- if ((error = fget_write(td, uap->fd, &fp)) != 0) {
- error = EBADF;
- goto done2;
- }
+ if ((error = fget_write(td, uap->fd, &fp)) != 0)
+ return (EBADF);
+ needfree = NULL;
/* note: can't use iovlen until iovcnt is validated */
iovlen = uap->iovcnt * sizeof (struct iovec);
if (uap->iovcnt > UIO_SMALLIOV) {
if (uap->iovcnt > UIO_MAXIOV) {
- needfree = NULL;
error = EINVAL;
goto done;
}
MALLOC(iov, struct iovec *, iovlen, M_IOV, M_WAITOK);
needfree = iov;
- } else {
+ } else
iov = aiov;
- needfree = NULL;
- }
auio.uio_iov = iov;
auio.uio_iovcnt = uap->iovcnt;
auio.uio_rw = UIO_WRITE;
@@ -543,8 +538,6 @@ done:
fdrop(fp, td);
if (needfree)
FREE(needfree, M_IOV);
-done2:
- mtx_unlock(&Giant);
return (error);
}
OpenPOWER on IntegriCloud