svn commit: r254026 - stable/8/sys/kern

Konstantin Belousov kib at FreeBSD.org
Wed Aug 7 06:23:29 UTC 2013


Author: kib
Date: Wed Aug  7 06:23:28 2013
New Revision: 254026
URL: http://svnweb.freebsd.org/changeset/base/254026

Log:
  MFC r253417:
  Clear the vnode knotes before destroying vpollinfo.
  
  MFC r253737:
  Split the destruction into the helper destroy_vpollinfo_free(), and
  call it when raced, instead of destroy_vpollinfo().

Modified:
  stable/8/sys/kern/vfs_subr.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/kern/   (props changed)

Modified: stable/8/sys/kern/vfs_subr.c
==============================================================================
--- stable/8/sys/kern/vfs_subr.c	Wed Aug  7 06:21:20 2013	(r254025)
+++ stable/8/sys/kern/vfs_subr.c	Wed Aug  7 06:23:28 2013	(r254026)
@@ -3432,14 +3432,23 @@ vbusy(struct vnode *vp)
 }
 
 static void
-destroy_vpollinfo(struct vpollinfo *vi)
+destroy_vpollinfo_free(struct vpollinfo *vi)
 {
-	seldrain(&vi->vpi_selinfo);
+
 	knlist_destroy(&vi->vpi_selinfo.si_note);
 	mtx_destroy(&vi->vpi_lock);
 	uma_zfree(vnodepoll_zone, vi);
 }
 
+static void
+destroy_vpollinfo(struct vpollinfo *vi)
+{
+
+	knlist_clear(&vi->vpi_selinfo.si_note, 1);
+	seldrain(&vi->vpi_selinfo);
+	destroy_vpollinfo_free(vi);
+}
+
 /*
  * Initalize per-vnode helper structure to hold poll-related state.
  */
@@ -3457,7 +3466,7 @@ v_addpollinfo(struct vnode *vp)
 	VI_LOCK(vp);
 	if (vp->v_pollinfo != NULL) {
 		VI_UNLOCK(vp);
-		destroy_vpollinfo(vi);
+		destroy_vpollinfo_free(vi);
 		return;
 	}
 	vp->v_pollinfo = vi;


More information about the svn-src-stable-8 mailing list