Author: kib
Date: Wed Aug  7 06:05:57 2013
New Revision: 254024
URL: http://svnweb.freebsd.org/changeset/base/254024

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/9/sys/kern/vfs_subr.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/kern/vfs_subr.c
==============================================================================
--- stable/9/sys/kern/vfs_subr.c        Wed Aug  7 05:55:02 2013        
(r254023)
+++ stable/9/sys/kern/vfs_subr.c        Wed Aug  7 06:05:57 2013        
(r254024)
@@ -3577,14 +3577,23 @@ vfs_msync(struct mount *mp, int flags)
 }
 
 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.
  */
@@ -3602,7 +3611,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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to