diff options
author | mav <mav@FreeBSD.org> | 2018-02-02 17:56:47 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2018-02-02 17:56:47 +0000 |
commit | 1c9c9edbe3f90e3cd9478fe0f7fc6ec3d21d9aa5 (patch) | |
tree | 98e34cde50c3c6ecb478a70c6a43dd8e0c17cd82 | |
parent | 95dd5889f9f9b98296ec67cf8516c96098b8309b (diff) | |
download | FreeBSD-src-1c9c9edbe3f90e3cd9478fe0f7fc6ec3d21d9aa5.zip FreeBSD-src-1c9c9edbe3f90e3cd9478fe0f7fc6ec3d21d9aa5.tar.gz |
MFC r307041 (by sbruno):
Fix bug where malloc(.., M_NOWAIT) return value is not checked, Change to
M_WAITOK and move outside the mutex
-rw-r--r-- | sys/kern/subr_gtaskqueue.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/kern/subr_gtaskqueue.c b/sys/kern/subr_gtaskqueue.c index 07bbc36..3e33eaa 100644 --- a/sys/kern/subr_gtaskqueue.c +++ b/sys/kern/subr_gtaskqueue.c @@ -729,7 +729,7 @@ taskqgroup_bind(struct taskqgroup *qgroup) * 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(>ask->bt_task, 0, 0, taskqgroup_binder, gtask); gtask->bt_cpuid = qgroup->tqg_queue[i].tgc_cpu; grouptaskqueue_enqueue(qgroup->tqg_queue[i].tgc_taskq, @@ -828,11 +828,11 @@ _taskqgroup_adjust(struct taskqgroup *qgroup, int cnt, int stride) 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); } |