aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_sbc.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2012-06-17 18:40:52 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2012-07-16 20:29:12 -0400
commit0c2ad7d1132d8b089b1d37875917858e03610019 (patch)
treee86cc118497605026a15c0e97630c57aeb625793 /drivers/target/target_core_sbc.c
parente1306bdab3af8bef620990a99e613f99eb30065c (diff)
target: add struct spc_ops + initial ->execute_rw pointer usage
Remove the execute_cmd method in struct se_subsystem_api, and always use the one directly in struct se_cmd. To make life simpler for SBC virtual backends a struct spc_ops that is passed to sbc_parse_cmd is added. For now it only contains an execute_rw member, but more will follow with the subsequent commits. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_sbc.c')
-rw-r--r--drivers/target/target_core_sbc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
index a5bd0c0eba08..da441b2782ce 100644
--- a/drivers/target/target_core_sbc.c
+++ b/drivers/target/target_core_sbc.c
@@ -395,7 +395,7 @@ out:
395 kfree(buf); 395 kfree(buf);
396} 396}
397 397
398int sbc_parse_cdb(struct se_cmd *cmd) 398int sbc_parse_cdb(struct se_cmd *cmd, struct spc_ops *ops)
399{ 399{
400 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev; 400 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
401 struct se_device *dev = cmd->se_dev; 401 struct se_device *dev = cmd->se_dev;
@@ -409,26 +409,31 @@ int sbc_parse_cdb(struct se_cmd *cmd)
409 sectors = transport_get_sectors_6(cdb); 409 sectors = transport_get_sectors_6(cdb);
410 cmd->t_task_lba = transport_lba_21(cdb); 410 cmd->t_task_lba = transport_lba_21(cdb);
411 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 411 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
412 cmd->execute_cmd = ops->execute_rw;
412 break; 413 break;
413 case READ_10: 414 case READ_10:
414 sectors = transport_get_sectors_10(cdb); 415 sectors = transport_get_sectors_10(cdb);
415 cmd->t_task_lba = transport_lba_32(cdb); 416 cmd->t_task_lba = transport_lba_32(cdb);
416 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 417 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
418 cmd->execute_cmd = ops->execute_rw;
417 break; 419 break;
418 case READ_12: 420 case READ_12:
419 sectors = transport_get_sectors_12(cdb); 421 sectors = transport_get_sectors_12(cdb);
420 cmd->t_task_lba = transport_lba_32(cdb); 422 cmd->t_task_lba = transport_lba_32(cdb);
421 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 423 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
424 cmd->execute_cmd = ops->execute_rw;
422 break; 425 break;
423 case READ_16: 426 case READ_16:
424 sectors = transport_get_sectors_16(cdb); 427 sectors = transport_get_sectors_16(cdb);
425 cmd->t_task_lba = transport_lba_64(cdb); 428 cmd->t_task_lba = transport_lba_64(cdb);
426 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 429 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
430 cmd->execute_cmd = ops->execute_rw;
427 break; 431 break;
428 case WRITE_6: 432 case WRITE_6:
429 sectors = transport_get_sectors_6(cdb); 433 sectors = transport_get_sectors_6(cdb);
430 cmd->t_task_lba = transport_lba_21(cdb); 434 cmd->t_task_lba = transport_lba_21(cdb);
431 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 435 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
436 cmd->execute_cmd = ops->execute_rw;
432 break; 437 break;
433 case WRITE_10: 438 case WRITE_10:
434 case WRITE_VERIFY: 439 case WRITE_VERIFY:
@@ -437,6 +442,7 @@ int sbc_parse_cdb(struct se_cmd *cmd)
437 if (cdb[1] & 0x8) 442 if (cdb[1] & 0x8)
438 cmd->se_cmd_flags |= SCF_FUA; 443 cmd->se_cmd_flags |= SCF_FUA;
439 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 444 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
445 cmd->execute_cmd = ops->execute_rw;
440 break; 446 break;
441 case WRITE_12: 447 case WRITE_12:
442 sectors = transport_get_sectors_12(cdb); 448 sectors = transport_get_sectors_12(cdb);
@@ -444,6 +450,7 @@ int sbc_parse_cdb(struct se_cmd *cmd)
444 if (cdb[1] & 0x8) 450 if (cdb[1] & 0x8)
445 cmd->se_cmd_flags |= SCF_FUA; 451 cmd->se_cmd_flags |= SCF_FUA;
446 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 452 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
453 cmd->execute_cmd = ops->execute_rw;
447 break; 454 break;
448 case WRITE_16: 455 case WRITE_16:
449 sectors = transport_get_sectors_16(cdb); 456 sectors = transport_get_sectors_16(cdb);
@@ -451,6 +458,7 @@ int sbc_parse_cdb(struct se_cmd *cmd)
451 if (cdb[1] & 0x8) 458 if (cdb[1] & 0x8)
452 cmd->se_cmd_flags |= SCF_FUA; 459 cmd->se_cmd_flags |= SCF_FUA;
453 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 460 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
461 cmd->execute_cmd = ops->execute_rw;
454 break; 462 break;
455 case XDWRITEREAD_10: 463 case XDWRITEREAD_10:
456 if ((cmd->data_direction != DMA_TO_DEVICE) || 464 if ((cmd->data_direction != DMA_TO_DEVICE) ||
@@ -464,6 +472,7 @@ int sbc_parse_cdb(struct se_cmd *cmd)
464 /* 472 /*
465 * Setup BIDI XOR callback to be run after I/O completion. 473 * Setup BIDI XOR callback to be run after I/O completion.
466 */ 474 */
475 cmd->execute_cmd = ops->execute_rw;
467 cmd->transport_complete_callback = &xdreadwrite_callback; 476 cmd->transport_complete_callback = &xdreadwrite_callback;
468 if (cdb[1] & 0x8) 477 if (cdb[1] & 0x8)
469 cmd->se_cmd_flags |= SCF_FUA; 478 cmd->se_cmd_flags |= SCF_FUA;
@@ -486,6 +495,7 @@ int sbc_parse_cdb(struct se_cmd *cmd)
486 * Setup BIDI XOR callback to be run during after I/O 495 * Setup BIDI XOR callback to be run during after I/O
487 * completion. 496 * completion.
488 */ 497 */
498 cmd->execute_cmd = ops->execute_rw;
489 cmd->transport_complete_callback = &xdreadwrite_callback; 499 cmd->transport_complete_callback = &xdreadwrite_callback;
490 if (cdb[1] & 0x8) 500 if (cdb[1] & 0x8)
491 cmd->se_cmd_flags |= SCF_FUA; 501 cmd->se_cmd_flags |= SCF_FUA;