Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 May 2011 20:07:15 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r222267 - in head/sys/cddl: compat/opensolaris/kern compat/opensolaris/sys contrib/opensolaris/uts/common/fs/zfs contrib/opensolaris/uts/common/fs/zfs/sys
Message-ID:  <201105242007.p4OK7FkF083869@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Tue May 24 20:07:15 2011
New Revision: 222267
URL: http://svn.freebsd.org/changeset/base/222267

Log:
  Don't access task structure once we call task function.
  The task structure might be no longer available.
  This also allows to eliminates the need for two tasks in the zio structure.
  
  Submitted by:	anonymous
  MFC after:	2 weeks

Modified:
  head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
  head/sys/cddl/compat/opensolaris/sys/taskq.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c

Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
==============================================================================
--- head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c	Tue May 24 19:55:57 2011	(r222266)
+++ head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c	Tue May 24 20:07:15 2011	(r222267)
@@ -147,9 +147,7 @@ taskq_run_safe(void *arg, int pending __
 {
 	struct ostask *task = arg;
 
-	ASSERT(task->ost_magic == TASKQ_MAGIC);
 	task->ost_func(task->ost_arg);
-	task->ost_magic = 0;
 }
 
 taskqid_t
@@ -158,15 +156,12 @@ taskq_dispatch_safe(taskq_t *tq, task_fu
 {
 	int prio;
 
-	ASSERT(task->ost_magic != TASKQ_MAGIC);
-
 	/* 
 	 * If TQ_FRONT is given, we want higher priority for this task, so it
 	 * can go at the front of the queue.
 	 */
 	prio = !!(flags & TQ_FRONT);
 
-	task->ost_magic = TASKQ_MAGIC;
 	task->ost_func = func;
 	task->ost_arg = arg;
 

Modified: head/sys/cddl/compat/opensolaris/sys/taskq.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/taskq.h	Tue May 24 19:55:57 2011	(r222266)
+++ head/sys/cddl/compat/opensolaris/sys/taskq.h	Tue May 24 20:07:15 2011	(r222267)
@@ -35,7 +35,6 @@ struct ostask {
 	struct task	 ost_task;
 	task_func_t	*ost_func;
 	void		*ost_arg;
-	int		 ost_magic;
 };
 
 taskqid_t taskq_dispatch_safe(taskq_t *tq, task_func_t func, void *arg,

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h	Tue May 24 19:55:57 2011	(r222266)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h	Tue May 24 20:07:15 2011	(r222267)
@@ -421,8 +421,7 @@ struct zio {
 
 #ifdef _KERNEL
 	/* FreeBSD only. */
-	struct ostask	io_task_issue;
-	struct ostask	io_task_interrupt;
+	struct ostask	io_task;
 #endif
 };
 

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c	Tue May 24 19:55:57 2011	(r222266)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c	Tue May 24 20:07:15 2011	(r222267)
@@ -1068,19 +1068,9 @@ zio_taskq_dispatch(zio_t *zio, enum zio_
 	spa_t *spa = zio->io_spa;
 	zio_type_t t = zio->io_type;
 	int flags = TQ_SLEEP | (cutinline ? TQ_FRONT : 0);
-#ifdef _KERNEL
-	struct ostask *task;
-#endif
 
 	ASSERT(q == ZIO_TASKQ_ISSUE || q == ZIO_TASKQ_INTERRUPT);
 
-#ifdef _KERNEL
-	if (q == ZIO_TASKQ_ISSUE)
-		task = &zio->io_task_issue;
-	else /* if (q == ZIO_TASKQ_INTERRUPT) */
-		task = &zio->io_task_interrupt;
-#endif
-
 	/*
 	 * If we're a config writer or a probe, the normal issue and
 	 * interrupt threads may all be blocked waiting for the config lock.
@@ -1105,7 +1095,7 @@ zio_taskq_dispatch(zio_t *zio, enum zio_
 	ASSERT3U(q, <, ZIO_TASKQ_TYPES);
 #ifdef _KERNEL
 	(void) taskq_dispatch_safe(spa->spa_zio_taskq[t][q],
-	    (task_func_t *)zio_execute, zio, flags, task);
+	    (task_func_t *)zio_execute, zio, flags, &zio->io_task);
 #else
 	(void) taskq_dispatch(spa->spa_zio_taskq[t][q],
 	    (task_func_t *)zio_execute, zio, flags);
@@ -2904,7 +2894,7 @@ zio_done(zio_t *zio)
 			(void) taskq_dispatch_safe(
 			    spa->spa_zio_taskq[ZIO_TYPE_CLAIM][ZIO_TASKQ_ISSUE],
 			    (task_func_t *)zio_reexecute, zio, TQ_SLEEP,
-			    &zio->io_task_issue);
+			    &zio->io_task);
 #else
 			(void) taskq_dispatch(
 			    spa->spa_zio_taskq[ZIO_TYPE_CLAIM][ZIO_TASKQ_ISSUE],



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105242007.p4OK7FkF083869>