summaryrefslogtreecommitdiffstats
path: root/usr
diff options
context:
space:
mode:
authorNicholas Bellinger <nab@linux-iscsi.org>2011-08-13 05:30:31 -0700
committerNicholas Bellinger <nab@linux-iscsi.org>2011-08-22 19:26:28 +0000
commitc3c74c7a33d837be391ab61aaae39bb21f16736a (patch)
tree376a28bf46562dbdb0aaa545a0c2c302717e9444 /usr
parent525a48a21da259d00d6ebc5b60563b5bcf022c26 (diff)
downloadlinux-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