diff options
author | Matt Macy <mmacy@FreeBSD.org> | 2018-05-09 18:47:24 +0000 |
---|---|---|
committer | Matt Macy <mmacy@FreeBSD.org> | 2018-05-09 18:47:24 +0000 |
commit | cbd92ce62e92bd17871c9668c2c2bebac3e2ac2e (patch) | |
tree | 40c405d5c0a6545e7dfd7beb64dc7e5076f7b644 /sys/kern/vfs_aio.c | |
parent | 0272270a8d6fe4e6edb92de3e1711442e5d15766 (diff) | |
download | src-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.c | 14 |
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); |