svn commit: r275486 - stable/10/cddl/contrib/opensolaris/lib/libzpool/common

Xin LI delphij at FreeBSD.org
Thu Dec 4 23:17:36 UTC 2014


Author: delphij
Date: Thu Dec  4 23:17:35 2014
New Revision: 275486
URL: https://svnweb.freebsd.org/changeset/base/275486

Log:
  MFC r274303:
  
  Apply upstream 13597:3eac1e8e0f4c (git: illumos-gate at aa846ad9):
  
  Initialize tqent_flags in the userland taskq implementation.  Without
  this the assertion of tq->tq_freelist != NULL may fail in taskq_destroy.
  
  The problem is that tqent_flags is never initialized in the userland
  implementation while the kernel one does initialize it.  Without proper
  initialization, the flag may have its lowest bit set, making it treated
  as TQENT_FLAG_PREALLOC and never removing taskq_ent_t from tq_freelist.

Modified:
  stable/10/cddl/contrib/opensolaris/lib/libzpool/common/taskq.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/cddl/contrib/opensolaris/lib/libzpool/common/taskq.c
==============================================================================
--- stable/10/cddl/contrib/opensolaris/lib/libzpool/common/taskq.c	Thu Dec  4 23:15:44 2014	(r275485)
+++ stable/10/cddl/contrib/opensolaris/lib/libzpool/common/taskq.c	Thu Dec  4 23:17:35 2014	(r275486)
@@ -24,6 +24,7 @@
  */
 /*
  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2012 Garrett D'Amore <garrett at damore.org>.  All rights reserved.
  */
 
 #include <sys/zfs_context.h>
@@ -136,6 +137,7 @@ taskq_dispatch(taskq_t *tq, task_func_t 
 	t->tqent_prev->tqent_next = t;
 	t->tqent_func = func;
 	t->tqent_arg = arg;
+	t->tqent_flags = 0;
 	cv_signal(&tq->tq_dispatch_cv);
 	mutex_exit(&tq->tq_lock);
 	return (1);


More information about the svn-src-all mailing list