]> git.proxmox.com Git - mirror_spl.git/commit
Make taskq_member() use ->journal_info
authorRichard Yao <richard.yao@clusterhq.com>
Thu, 3 Dec 2015 19:15:16 +0000 (14:15 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 8 Dec 2015 21:24:47 +0000 (13:24 -0800)
commita430c11f0b1ef16ca5edf3059e4082709277376c
treeb16f8abb6b7c13c0fc73b9538a3181014683fb52
parent1683e75edc1fdca1eba53f16ca08ce32c5e736d1
Make taskq_member() use ->journal_info

The ->journal_info pointer in the task_struct is reserved for use by
filesystems and because the kernel can have multiple file systems on the
same stack due to direct reclaim, each filesystem that touches
->journal_info in a callback function will save the value at the start
of its frame and restore it at the end of its frame.  This allows us to
safely use ->journal_info to store a pointer to the taskq's struct in
taskq threads so that ZFS code paths can detect the presence of a taskq.
This could break if the ZFS code were to use taskq_member from the
context of direct reclaim. However, there are no such uses of it in that
manner, so this is safe.

This eliminates an O(N) list traversal under a spinlock with an O(1)
unlocked pointer comparison.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: tuxoko <tuxoko@gmail.com>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes #500
include/sys/taskq.h
module/spl/spl-taskq.c