diff options
Diffstat (limited to 'drivers/scsi/scsi_debug.c')
-rw-r--r-- | drivers/scsi/scsi_debug.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 1f8e2dc9c616..30268bb2ddb6 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c | |||
@@ -2363,17 +2363,13 @@ do_device_access(struct scsi_cmnd *scmd, u64 lba, u32 num, bool do_write) | |||
2363 | u64 block, rest = 0; | 2363 | u64 block, rest = 0; |
2364 | struct scsi_data_buffer *sdb; | 2364 | struct scsi_data_buffer *sdb; |
2365 | enum dma_data_direction dir; | 2365 | enum dma_data_direction dir; |
2366 | size_t (*func)(struct scatterlist *, unsigned int, void *, size_t, | ||
2367 | off_t); | ||
2368 | 2366 | ||
2369 | if (do_write) { | 2367 | if (do_write) { |
2370 | sdb = scsi_out(scmd); | 2368 | sdb = scsi_out(scmd); |
2371 | dir = DMA_TO_DEVICE; | 2369 | dir = DMA_TO_DEVICE; |
2372 | func = sg_pcopy_to_buffer; | ||
2373 | } else { | 2370 | } else { |
2374 | sdb = scsi_in(scmd); | 2371 | sdb = scsi_in(scmd); |
2375 | dir = DMA_FROM_DEVICE; | 2372 | dir = DMA_FROM_DEVICE; |
2376 | func = sg_pcopy_from_buffer; | ||
2377 | } | 2373 | } |
2378 | 2374 | ||
2379 | if (!sdb->length) | 2375 | if (!sdb->length) |
@@ -2385,16 +2381,16 @@ do_device_access(struct scsi_cmnd *scmd, u64 lba, u32 num, bool do_write) | |||
2385 | if (block + num > sdebug_store_sectors) | 2381 | if (block + num > sdebug_store_sectors) |
2386 | rest = block + num - sdebug_store_sectors; | 2382 | rest = block + num - sdebug_store_sectors; |
2387 | 2383 | ||
2388 | ret = func(sdb->table.sgl, sdb->table.nents, | 2384 | ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents, |
2389 | fake_storep + (block * scsi_debug_sector_size), | 2385 | fake_storep + (block * scsi_debug_sector_size), |
2390 | (num - rest) * scsi_debug_sector_size, 0); | 2386 | (num - rest) * scsi_debug_sector_size, 0, do_write); |
2391 | if (ret != (num - rest) * scsi_debug_sector_size) | 2387 | if (ret != (num - rest) * scsi_debug_sector_size) |
2392 | return ret; | 2388 | return ret; |
2393 | 2389 | ||
2394 | if (rest) { | 2390 | if (rest) { |
2395 | ret += func(sdb->table.sgl, sdb->table.nents, | 2391 | ret += sg_copy_buffer(sdb->table.sgl, sdb->table.nents, |
2396 | fake_storep, rest * scsi_debug_sector_size, | 2392 | fake_storep, rest * scsi_debug_sector_size, |
2397 | (num - rest) * scsi_debug_sector_size); | 2393 | (num - rest) * scsi_debug_sector_size, do_write); |
2398 | } | 2394 | } |
2399 | 2395 | ||
2400 | return ret; | 2396 | return ret; |