Files
mirror_zfs/include/sys
Prakash Surya 8f2503e0af Store copy of tqent_flags prior to servicing task
A preallocated taskq_ent_t's tqent_flags must be checked prior to
servicing the taskq_ent_t. Once a preallocated taskq entry is serviced,
the ownership of the entry is handed back to the caller of
taskq_dispatch, thus the entry's contents can potentially be mangled.

In particular, this is a problem in the case where a preallocated taskq
entry is serviced, and the caller clears it's tqent_flags field. Thus,
when the function returns and task_done is called, it looks as though
the entry is **not** a preallocated task (when in fact it **is** a
preallocated task).

In this situation, task_done will place the preallocated taskq_ent_t
structure onto the taskq_t's free list. This is a **huge** mistake. If
the taskq_ent_t is then freed by the caller of taskq_dispatch, the
taskq_t's free list will hold a pointer to garbage data. Even worse, if
nothing has over written the freed memory before the pointer is
dereferenced, it may still look as though it points to a valid list_head
belonging to a taskq_ent_t structure.

Thus, the task entry's flags are now copied prior to servicing the task.
This copy is then checked to see if it is a preallocated task, and
determine if the entry needs to be passed down to the task_done
function.

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #71
2011-12-16 16:54:00 -08:00
..
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-02-04 14:09:08 -08:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-06-11 15:57:25 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-03-22 12:18:44 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-04-06 20:06:03 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-01-27 16:06:09 -08:00
2011-02-23 14:32:15 -08:00
2011-01-27 16:06:09 -08:00
2011-01-27 16:06:09 -08:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-01-27 16:06:09 -08:00
2011-04-06 20:06:03 -07:00
2010-05-17 15:18:00 -07:00
2010-08-27 14:23:48 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-04-29 13:58:45 -07:00
2010-05-17 15:18:00 -07:00
2011-01-27 16:06:09 -08:00
2010-06-11 15:57:25 -07:00
2010-05-17 15:18:00 -07:00
2010-06-11 15:57:25 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-01-27 16:06:09 -08:00
2010-07-20 13:29:35 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-07-20 13:29:35 -07:00
2010-05-17 15:18:00 -07:00
2010-06-11 15:57:25 -07:00
2010-05-17 15:18:00 -07:00
2011-04-22 16:17:13 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-11-11 09:18:28 -08:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-06-11 15:57:25 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2010-05-17 15:18:00 -07:00
2011-04-29 12:10:54 -07:00
2010-05-17 15:18:00 -07:00
2011-11-09 16:51:25 -08:00
2011-11-11 09:18:28 -08:00
2010-05-17 15:18:00 -07:00