diff options
author | Christoph Hellwig <hch@infradead.org> | 2012-06-17 18:40:52 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-07-16 20:29:12 -0400 |
commit | 0c2ad7d1132d8b089b1d37875917858e03610019 (patch) | |
tree | e86cc118497605026a15c0e97630c57aeb625793 /drivers/target/target_core_sbc.c | |
parent | e1306bdab3af8bef620990a99e613f99eb30065c (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.c | 12 |
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 | ||
398 | int sbc_parse_cdb(struct se_cmd *cmd) | 398 | int 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; |