aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_debug.c')
-rw-r--r--drivers/scsi/scsi_debug.c12
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;