From 82f4b826347e72f3963df37c1be4daf7052b112b Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Fri, 7 Dec 2018 16:44:52 +0000 Subject: [PATCH] fd: try do less work with the lock in dup Sponsored by: The FreeBSD Foundation --- sys/kern/kern_descrip.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 61dd908144f3..e44285297702 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -818,6 +818,7 @@ kern_dup(struct thread *td, u_int mode, int flags, int old, int new) p = td->td_proc; fdp = p->p_fd; + oioctls = NULL; MPASS((flags & ~(FDDUP_FLAG_CLOEXEC)) == 0); MPASS(mode < FDDUP_LASTMODE); @@ -922,7 +923,6 @@ kern_dup(struct thread *td, u_int mode, int flags, int old, int new) #ifdef CAPABILITIES seq_write_end(&newfde->fde_seq); #endif - filecaps_free_finish(oioctls); td->td_retval[0] = new; error = 0; @@ -935,6 +935,7 @@ unlock: FILEDESC_XUNLOCK(fdp); } + filecaps_free_finish(oioctls); return (error); } @@ -1511,7 +1512,7 @@ filecaps_copy_prep(const struct filecaps *src) u_long *ioctls; size_t size; - if (src->fc_ioctls == NULL) + if (__predict_true(src->fc_ioctls == NULL)) return (NULL); KASSERT(src->fc_nioctls > 0, @@ -1529,7 +1530,7 @@ filecaps_copy_finish(const struct filecaps *src, struct filecaps *dst, size_t size; *dst = *src; - if (src->fc_ioctls == NULL) { + if (__predict_true(src->fc_ioctls == NULL)) { MPASS(ioctls == NULL); return; }