summaryrefslogtreecommitdiffstats
path: root/sys/cddl
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2011-05-24 20:07:15 +0000
committerpjd <pjd@FreeBSD.org>2011-05-24 20:07:15 +0000
commit32c533f9820392a61e9edde30ec09e28d8b3bb1d (patch)
treeb3f27f8cb952b390eabc1d3ec318b7307fd8cf21 /sys/cddl
parent3c1a24d7018d4bb8278eaa5c886d2b2551644214 (diff)
downloadFreeBSD-src-32c533f9820392a61e9edde30ec09e28d8b3bb1d.zip
FreeBSD-src-32c533f9820392a61e9edde30ec09e28d8b3bb1d.tar.gz
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
Diffstat (limited to 'sys/cddl')
-rw-r--r--sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c5
-rw-r--r--sys/cddl/compat/opensolaris/sys/taskq.h1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h3
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c14
4 files changed, 3 insertions, 20 deletions
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c b/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
index 5a20488..a74f795 100644
--- a/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
+++ b/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c
@@ -147,9 +147,7 @@ taskq_run_safe(void *arg, int pending __unused)
{
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_func_t func, void *arg, u_int flags,
{
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;
diff --git a/sys/cddl/compat/opensolaris/sys/taskq.h b/sys/cddl/compat/opensolaris/sys/taskq.h
index eedc4da..ffe70ca 100644
--- a/sys/cddl/compat/opensolaris/sys/taskq.h
+++ b/sys/cddl/compat/opensolaris/sys/taskq.h
@@ -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,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
index 355f560..e8372f7 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
@@ -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
};
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
index 5e968b5..9a04344 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
@@ -1068,19 +1068,9 @@ zio_taskq_dispatch(zio_t *zio, enum zio_taskq_type q, boolean_t cutinline)
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_taskq_type q, boolean_t cutinline)
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],
OpenPOWER on IntegriCloud