aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_aio.c
diff options
context:
space:
mode:
authorMatt Macy <mmacy@FreeBSD.org>2018-05-09 18:47:24 +0000
committerMatt Macy <mmacy@FreeBSD.org>2018-05-09 18:47:24 +0000
commitcbd92ce62e92bd17871c9668c2c2bebac3e2ac2e (patch)
tree40c405d5c0a6545e7dfd7beb64dc7e5076f7b644 /sys/kern/vfs_aio.c
parent0272270a8d6fe4e6edb92de3e1711442e5d15766 (diff)
downloadsrc-cbd92ce62e92bd17871c9668c2c2bebac3e2ac2e.tar.gz
src-cbd92ce62e92bd17871c9668c2c2bebac3e2ac2e.zip
Eliminate the overhead of gratuitous repeated reinitialization of cap_rights
- Add macros to allow preinitialization of cap_rights_t. - Convert most commonly used code paths to use preinitialized cap_rights_t. A 3.6% speedup in fstat was measured with this change. Reported by: mjg Reviewed by: oshogbo Approved by: sbruno MFC after: 1 month
Notes
Notes: svn path=/head/; revision=333425
Diffstat (limited to 'sys/kern/vfs_aio.c')
-rw-r--r--sys/kern/vfs_aio.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index c82823f00274..69dd50cf7bdf 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -1450,7 +1450,6 @@ aio_aqueue(struct thread *td, struct aiocb *ujob, struct aioliojob *lj,
int type, struct aiocb_ops *ops)
{
struct proc *p = td->td_proc;
- cap_rights_t rights;
struct file *fp;
struct kaiocb *job;
struct kaioinfo *ki;
@@ -1528,21 +1527,19 @@ aio_aqueue(struct thread *td, struct aiocb *ujob, struct aioliojob *lj,
fd = job->uaiocb.aio_fildes;
switch (opcode) {
case LIO_WRITE:
- error = fget_write(td, fd,
- cap_rights_init(&rights, CAP_PWRITE), &fp);
+ error = fget_write(td, fd, &cap_pwrite_rights, &fp);
break;
case LIO_READ:
- error = fget_read(td, fd,
- cap_rights_init(&rights, CAP_PREAD), &fp);
+ error = fget_read(td, fd, &cap_pread_rights, &fp);
break;
case LIO_SYNC:
- error = fget(td, fd, cap_rights_init(&rights, CAP_FSYNC), &fp);
+ error = fget(td, fd, &cap_fsync_rights, &fp);
break;
case LIO_MLOCK:
fp = NULL;
break;
case LIO_NOP:
- error = fget(td, fd, cap_rights_init(&rights), &fp);
+ error = fget(td, fd, &cap_no_rights, &fp);
break;
default:
error = EINVAL;
@@ -1959,14 +1956,13 @@ sys_aio_cancel(struct thread *td, struct aio_cancel_args *uap)
struct kaioinfo *ki;
struct kaiocb *job, *jobn;
struct file *fp;
- cap_rights_t rights;
int error;
int cancelled = 0;
int notcancelled = 0;
struct vnode *vp;
/* Lookup file object. */
- error = fget(td, uap->fd, cap_rights_init(&rights), &fp);
+ error = fget(td, uap->fd, &cap_no_rights, &fp);
if (error)
return (error);