Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Dec 2018 16:44:52 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r341700 - head/sys/kern
Message-ID:  <201812071644.wB7GiqpR082635@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201812071644.wB7GiqpR082635>