svn commit: r272596 - head/sys/fs/devfs
Mateusz Guzik
mjg at FreeBSD.org
Mon Oct 6 06:20:36 UTC 2014
Author: mjg
Date: Mon Oct 6 06:20:35 2014
New Revision: 272596
URL: https://svnweb.freebsd.org/changeset/base/272596
Log:
devfs: don't take proctree_lock unconditionally in devfs_close
MFC after: 1 week
Modified:
head/sys/fs/devfs/devfs_vnops.c
Modified: head/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- head/sys/fs/devfs/devfs_vnops.c Mon Oct 6 06:19:54 2014 (r272595)
+++ head/sys/fs/devfs/devfs_vnops.c Mon Oct 6 06:20:35 2014 (r272596)
@@ -546,19 +546,22 @@ devfs_close(struct vop_close_args *ap)
* plus the session), release the reference from the session.
*/
oldvp = NULL;
- sx_xlock(&proctree_lock);
if (td && vp == td->td_proc->p_session->s_ttyvp) {
- SESS_LOCK(td->td_proc->p_session);
- VI_LOCK(vp);
- if (count_dev(dev) == 2 && (vp->v_iflag & VI_DOOMED) == 0) {
- td->td_proc->p_session->s_ttyvp = NULL;
- td->td_proc->p_session->s_ttydp = NULL;
- oldvp = vp;
+ sx_xlock(&proctree_lock);
+ if (vp == td->td_proc->p_session->s_ttyvp) {
+ SESS_LOCK(td->td_proc->p_session);
+ VI_LOCK(vp);
+ if (count_dev(dev) == 2 &&
+ (vp->v_iflag & VI_DOOMED) == 0) {
+ td->td_proc->p_session->s_ttyvp = NULL;
+ td->td_proc->p_session->s_ttydp = NULL;
+ oldvp = vp;
+ }
+ VI_UNLOCK(vp);
+ SESS_UNLOCK(td->td_proc->p_session);
}
- VI_UNLOCK(vp);
- SESS_UNLOCK(td->td_proc->p_session);
+ sx_xunlock(&proctree_lock);
}
- sx_xunlock(&proctree_lock);
if (oldvp != NULL)
vrele(oldvp);
/*
More information about the svn-src-head
mailing list