swiotlb: fix map_sg failure handling
FUJITA Tomonori [Wed, 17 Oct 2007 08:06:18 +0000 (10:06 +0200)]
sg list elements might not be continuous.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

lib/swiotlb.c

index c419ecf..752fd95 100644 (file)
@@ -696,7 +696,7 @@ swiotlb_map_sg(struct device *hwdev, struct scatterlist *sgl, int nelems,
                                /* Don't panic here, we expect map_sg users
                                   to do proper error handling. */
                                swiotlb_full(hwdev, sg->length, dir, 0);
-                               swiotlb_unmap_sg(hwdev, sg - i, i, dir);
+                               swiotlb_unmap_sg(hwdev, sgl, i, dir);
                                sgl[0].dma_length = 0;
                                return 0;
                        }