svn commit: r268339 - stable/10/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Sun Jul 6 22:56:35 UTC 2014
Author: mjg
Date: Sun Jul 6 22:56:34 2014
New Revision: 268339
URL: http://svnweb.freebsd.org/changeset/base/268339
Log:
MFC r267755:
Don't take filedesc lock in fdunshare().
We can read refcnt safely and only care if it is equal to 1.
If it could suddenly change from 1 to something bigger the code would be
buggy even in the previous form and transitions from > 1 to 1 are equally racy
and harmless (we copy even though there is no need).
Modified:
stable/10/sys/kern/kern_descrip.c
Modified: stable/10/sys/kern/kern_descrip.c
==============================================================================
--- stable/10/sys/kern/kern_descrip.c Sun Jul 6 22:54:17 2014 (r268338)
+++ stable/10/sys/kern/kern_descrip.c Sun Jul 6 22:56:34 2014 (r268339)
@@ -1885,17 +1885,14 @@ fdshare(struct filedesc *fdp)
void
fdunshare(struct proc *p, struct thread *td)
{
+ struct filedesc *tmp;
- FILEDESC_XLOCK(p->p_fd);
- if (p->p_fd->fd_refcnt > 1) {
- struct filedesc *tmp;
-
- FILEDESC_XUNLOCK(p->p_fd);
- tmp = fdcopy(p->p_fd);
- fdescfree(td);
- p->p_fd = tmp;
- } else
- FILEDESC_XUNLOCK(p->p_fd);
+ if (p->p_fd->fd_refcnt == 1)
+ return;
+
+ tmp = fdcopy(p->p_fd);
+ fdescfree(td);
+ p->p_fd = tmp;
}
/*
More information about the svn-src-stable-10
mailing list