svn commit: r307041 - head/sys/kern

Sean Bruno sbruno at FreeBSD.org
Tue Oct 11 14:08:54 UTC 2016


Author: sbruno
Date: Tue Oct 11 14:08:53 2016
New Revision: 307041
URL: https://svnweb.freebsd.org/changeset/base/307041

Log:
  Fix bug where malloc(.., M_NOWAIT) return value is not checked, Change to
  M_WAITOK and move outside the mutex
  
  Submitted by:	shurd
  Reviewed by:	mmacy at nextbsd.org
  MFC after:	2 weeks
  Differential Revision:	https://reviews.freebsd.org/D7649

Modified:
  head/sys/kern/subr_gtaskqueue.c

Modified: head/sys/kern/subr_gtaskqueue.c
==============================================================================
--- head/sys/kern/subr_gtaskqueue.c	Tue Oct 11 13:30:39 2016	(r307040)
+++ head/sys/kern/subr_gtaskqueue.c	Tue Oct 11 14:08:53 2016	(r307041)
@@ -728,7 +728,7 @@ taskqgroup_bind(struct taskqgroup *qgrou
 	 * one.
 	 */
 	for (i = 0; i < qgroup->tqg_cnt; i++) {
-		gtask = malloc(sizeof (*gtask), M_DEVBUF, M_NOWAIT);
+		gtask = malloc(sizeof (*gtask), M_DEVBUF, M_WAITOK);
 		GTASK_INIT(&gtask->bt_task, 0, 0, taskqgroup_binder, gtask);
 		gtask->bt_cpuid = qgroup->tqg_queue[i].tgc_cpu;
 		grouptaskqueue_enqueue(qgroup->tqg_queue[i].tgc_taskq,
@@ -827,11 +827,11 @@ _taskqgroup_adjust(struct taskqgroup *qg
 	for (i = cnt; i < old_cnt; i++)
 		taskqgroup_cpu_remove(qgroup, i);
 
+	taskqgroup_bind(qgroup);
+
 	mtx_lock(&qgroup->tqg_lock);
 	qgroup->tqg_adjusting = 0;
 
-	taskqgroup_bind(qgroup);
-
 	return (0);
 }
 


More information about the svn-src-head mailing list