diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-05-19 20:19:11 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-03 09:32:05 +0900 |
commit | c20bc94058d10ee00a72490e05b9c314f2a75d4e (patch) | |
tree | 9f2b2ee9e44974663ff98594cf83f8c04a694a4d /lib/parser.c | |
parent | 26e45fbaec96c748f807925ea3855deb3c504118 (diff) |
target: Fix bug with task_sg chained transport_free_dev_tasks release
commit f436677262a5b524ac87675014c6d4e8ee153029 upstream.
This patch addresses a bug in the target core release path for HW
operation where transport_free_dev_tasks() was incorrectly being called
from transport_lun_remove_cmd() while releasing a se_cmd reference and
calling struct target_core_fabric_ops->queue_data_in().
This would result in a OOPs with HW target mode when the release of
se_task->task_sg[] would happen before pci_unmap_sg() can be called in
HW target mode fabric module code. This patch addresses the issue by
moving transport_free_dev_tasks() from transport_lun_remove_cmd() into
transport_generic_free_cmd(), and adding TRANSPORT_FREE_CMD_INTR and
transport_generic_free_cmd_intr() to allow se_cmd descriptor release
to happen fromfrom within transport_processing_thread() process context
when release of se_cmd is not possible from HW interrupt context.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <jbottomley@parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'lib/parser.c')
0 files changed, 0 insertions, 0 deletions