Author: mjg
Date: Fri Dec  7 16:44:52 2018
New Revision: 341700
URL: https://svnweb.freebsd.org/changeset/base/341700

Log:
  fd: try do less work with the lock in dup
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Fri Dec  7 16:22:54 2018        
(r341699)
+++ head/sys/kern/kern_descrip.c        Fri Dec  7 16:44:52 2018        
(r341700)
@@ -818,6 +818,7 @@ kern_dup(struct thread *td, u_int mode, int flags, int
 
        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
 #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, struc
        size_t size;
 
        *dst = *src;
-       if (src->fc_ioctls == NULL) {
+       if (__predict_true(src->fc_ioctls == NULL)) {
                MPASS(ioctls == NULL);
                return;
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to