diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-08-13 05:30:31 -0700 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-08-22 19:26:28 +0000 |
commit | c3c74c7a33d837be391ab61aaae39bb21f16736a (patch) | |
tree | 376a28bf46562dbdb0aaa545a0c2c302717e9444 /usr | |
parent | 525a48a21da259d00d6ebc5b60563b5bcf022c26 (diff) | |
download | linux-c3c74c7a33d837be391ab61aaae39bb21f16736a.tar.gz linux-c3c74c7a33d837be391ab61aaae39bb21f16736a.tar.bz2 linux-c3c74c7a33d837be391ab61aaae39bb21f16736a.zip |
target: Fix task SGL chaining breakage with transport_allocate_data_tasks
This patch fixes two bugs associated with transport_do_task_sg_chain()
operation where transport_allocate_data_tasks() was incorrectly setting
task_padded_sg for all tasks, and causing bogus task->task_sg_nents
assignments + OOPsen with fabrics depending upon this code. The first bit
here adds a task_sg_nents_padded check in transport_allocate_data_tasks()
to include an extra SGL vector when necessary for tasks that expect to
be linked using sg_chain().
The second change involves making transport_do_task_sg_chain() properly
account for the extra SGL vector when task->task_padded_sg is set for
the non trailing ->task_sg or single ->task_sg allocations. Note this
patch also removes the BUG_ON(!task->task_padded_sg) check within
transport_do_task_sg_chain() as we expect this to happen normally
with the updated logic in transport_allocate_data_tasks(), along with
being bogus for CONTROL_SG_IO_CDB type payloads.
So far this bugfix has been tested with tcm_qla2xxx and iblock backends
in (task_count > 1)( and (task_count == 1) operation.
Reported-by: Kiran Patil <kiran.patil@intel.com>
Cc: Kiran Patil <kiran.patil@intel.com>
Cc: Andy Grover <agrover@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions