Author: pjd
Date: Sat Jun  9 18:50:32 2012
New Revision: 236822
URL: http://svn.freebsd.org/changeset/base/236822

Log:
  There is no need to drop the FILEDESC lock around malloc(M_WAITOK) anymore, as
  we now use sx lock for filedesc structure protection.
  
  Reviewed by:  kib
  MFC after:    1 month

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Sat Jun  9 18:48:06 2012        
(r236821)
+++ head/sys/kern/kern_descrip.c        Sat Jun  9 18:50:32 2012        
(r236822)
@@ -1428,9 +1428,7 @@ out:
 }
 
 /*
- * Grow the file table to accomodate (at least) nfd descriptors.  This may
- * block and drop the filedesc lock, but it will reacquire it before
- * returning.
+ * Grow the file table to accomodate (at least) nfd descriptors.
  */
 static void
 fdgrowtable(struct filedesc *fdp, int nfd)
@@ -1456,7 +1454,6 @@ fdgrowtable(struct filedesc *fdp, int nf
                return;
 
        /* allocate a new table and (if required) new bitmaps */
-       FILEDESC_XUNLOCK(fdp);
        ntable = malloc((nnfiles * OFILESIZE) + sizeof(struct freetable),
            M_FILEDESC, M_ZERO | M_WAITOK);
        nfileflags = (char *)&ntable[nnfiles];
@@ -1465,20 +1462,7 @@ fdgrowtable(struct filedesc *fdp, int nf
                    M_FILEDESC, M_ZERO | M_WAITOK);
        else
                nmap = NULL;
-       FILEDESC_XLOCK(fdp);
 
-       /*
-        * We now have new tables ready to go.  Since we dropped the
-        * filedesc lock to call malloc(), watch out for a race.
-        */
-       onfiles = fdp->fd_nfiles;
-       if (onfiles >= nnfiles) {
-               /* we lost the race, but that's OK */
-               free(ntable, M_FILEDESC);
-               if (nmap != NULL)
-                       free(nmap, M_FILEDESC);
-               return;
-       }
        bcopy(fdp->fd_ofiles, ntable, onfiles * sizeof(*ntable));
        bcopy(fdp->fd_ofileflags, nfileflags, onfiles);
        otable = fdp->fd_ofiles;
_______________________________________________
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