Author: trasz
Date: Wed Sep  2 14:04:13 2015
New Revision: 287395
URL: https://svnweb.freebsd.org/changeset/base/287395

Log:
  Fixes a panic triggered by threaded Linux applications when running
  with RACCT/RCTL enabled.
  
  Reviewed by:  ngie@, ed@
  Tested by:    Larry Rosenman <l...@lerctr.org>
  MFC after:    1 month
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D3470

Modified:
  head/sys/compat/linux/linux_fork.c

Modified: head/sys/compat/linux/linux_fork.c
==============================================================================
--- head/sys/compat/linux/linux_fork.c  Wed Sep  2 12:46:42 2015        
(r287394)
+++ head/sys/compat/linux/linux_fork.c  Wed Sep  2 14:04:13 2015        
(r287395)
@@ -285,10 +285,20 @@ linux_clone_thread(struct thread *td, st
 
        p = td->td_proc;
 
+#ifdef RACCT
+       if (racct_enable) {
+               PROC_LOCK(p);
+               error = racct_add(p, RACCT_NTHR, 1);
+               PROC_UNLOCK(p);
+               if (error != 0)
+                       return (EPROCLIM);
+       }
+#endif
+
        /* Initialize our td */
        error = kern_thr_alloc(p, 0, &newtd);
        if (error)
-               return (error);
+               goto fail;
                                                                                
                                
        cpu_set_upcall(newtd, td);
 
@@ -369,6 +379,16 @@ linux_clone_thread(struct thread *td, st
        td->td_retval[0] = newtd->td_tid;
 
        return (0);
+
+fail:
+#ifdef RACCT
+       if (racct_enable) {
+               PROC_LOCK(p);
+               racct_sub(p, RACCT_NTHR, 1);
+               PROC_UNLOCK(p);
+       }
+#endif
+       return (error);
 }
 
 int
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to