aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/rsxx/core.c
diff options
context:
space:
mode:
authorPhilip J Kelleher <pjk1939@linux.vnet.ibm.com>2013-09-04 13:59:02 -0500
committerJens Axboe <axboe@kernel.dk>2013-11-08 09:10:28 -0700
commite5feab229f199dadee91073fbef5b507046086fd (patch)
treea5a5f75cd2ad53ecda8a9e2b3e95046e119be148 /drivers/block/rsxx/core.c
parentloop: fix crash when using unassigned loop device (diff)
downloadlinux-dev-e5feab229f199dadee91073fbef5b507046086fd.tar.xz
linux-dev-e5feab229f199dadee91073fbef5b507046086fd.zip
rsxx: Handling failed pci_map_page on PowerPC and double free.
The rsxx driver was not checking the correct value during a pci_map_page failure. Fixing this also uncovered a double free if the bio was returned before it was broken up into indiviadual 4k dmas, that is also fixed here. Signed-off-by: Philip J Kelleher <pjk1939@linux.vnet.ibm.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block/rsxx/core.c')
-rw-r--r--drivers/block/rsxx/core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 6e85e21445eb..e740a650d546 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -654,7 +654,8 @@ static void rsxx_eeh_failure(struct pci_dev *dev)
for (i = 0; i < card->n_targets; i++) {
spin_lock_bh(&card->ctrl[i].queue_lock);
cnt = rsxx_cleanup_dma_queue(&card->ctrl[i],
- &card->ctrl[i].queue);
+ &card->ctrl[i].queue,
+ COMPLETE_DMA);
spin_unlock_bh(&card->ctrl[i].queue_lock);
cnt += rsxx_dma_cancel(&card->ctrl[i]);