diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 05:17:39 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 05:17:39 -0400 |
| commit | 7c1953ddb609f1c161bf4a11a5e4e4577e82e557 (patch) | |
| tree | 283244582f4fafd15a2ddf52971e0e5ff048af47 /include | |
| parent | 1bc67188c3843b8e16caaa8624beeb0e2823c1f8 (diff) | |
| parent | b91bf5bf7fb0f35a8119a662e8e6b71ed950f443 (diff) | |
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (62 commits)
target: Fix compile warning w/ missing module.h include
target: Remove legacy se_task->task_timer and associated logic
target: Fix incorrect transport_sent usage
target: re-use the command S/G list for single-task commands
target: Fix BIDI t_task_cdb handling in transport_generic_new_cmd
target: remove transport_allocate_tasks
target: merge transport_new_cmd_obj into transport_generic_new_cmd
target: remove the task_sg_bidi field se_task and pSCSI BIDI support
target: transport_subsystem_check_init cleanups
target: use a workqueue for I/O completions
target: remove unused TRANSPORT_ states
target: remove TRANSPORT_DEFERRED_CMD state
target: remove the TRANSPORT_REMOVE state
target: move depth_left manipulation out of transport_generic_request_failure
target: stop task timers earlier
target: remove TF_TIMER_STOP
target: factor some duplicate code for stopping a task
target: fix list walking in transport_free_dev_tasks
target: use transport_cmd_check_stop_to_fabric consistently
target: do not pass the queue object to transport_remove_cmd_from_queue
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/target/target_core_base.h | 71 | ||||
| -rw-r--r-- | include/target/target_core_tmr.h | 2 | ||||
| -rw-r--r-- | include/target/target_core_transport.h | 75 |
3 files changed, 36 insertions, 112 deletions
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 27040653005e..35aa786f93da 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
| @@ -10,10 +10,7 @@ | |||
| 10 | #include <net/tcp.h> | 10 | #include <net/tcp.h> |
| 11 | 11 | ||
| 12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" | 12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" |
| 13 | #define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGABRT)) | ||
| 14 | 13 | ||
| 15 | /* Used by transport_generic_allocate_iovecs() */ | ||
| 16 | #define TRANSPORT_IOV_DATA_BUFFER 5 | ||
| 17 | /* Maximum Number of LUNs per Target Portal Group */ | 14 | /* Maximum Number of LUNs per Target Portal Group */ |
| 18 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ | 15 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ |
| 19 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 | 16 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 |
| @@ -75,32 +72,26 @@ enum transport_tpg_type_table { | |||
| 75 | }; | 72 | }; |
| 76 | 73 | ||
| 77 | /* Used for generate timer flags */ | 74 | /* Used for generate timer flags */ |
| 78 | enum timer_flags_table { | 75 | enum se_task_flags { |
| 79 | TF_RUNNING = 0x01, | 76 | TF_ACTIVE = (1 << 0), |
| 80 | TF_STOP = 0x02, | 77 | TF_SENT = (1 << 1), |
| 78 | TF_REQUEST_STOP = (1 << 2), | ||
| 81 | }; | 79 | }; |
| 82 | 80 | ||
| 83 | /* Special transport agnostic struct se_cmd->t_states */ | 81 | /* Special transport agnostic struct se_cmd->t_states */ |
| 84 | enum transport_state_table { | 82 | enum transport_state_table { |
| 85 | TRANSPORT_NO_STATE = 0, | 83 | TRANSPORT_NO_STATE = 0, |
| 86 | TRANSPORT_NEW_CMD = 1, | 84 | TRANSPORT_NEW_CMD = 1, |
| 87 | TRANSPORT_DEFERRED_CMD = 2, | ||
| 88 | TRANSPORT_WRITE_PENDING = 3, | 85 | TRANSPORT_WRITE_PENDING = 3, |
| 89 | TRANSPORT_PROCESS_WRITE = 4, | 86 | TRANSPORT_PROCESS_WRITE = 4, |
| 90 | TRANSPORT_PROCESSING = 5, | 87 | TRANSPORT_PROCESSING = 5, |
| 91 | TRANSPORT_COMPLETE_OK = 6, | 88 | TRANSPORT_COMPLETE = 6, |
| 92 | TRANSPORT_COMPLETE_FAILURE = 7, | ||
| 93 | TRANSPORT_COMPLETE_TIMEOUT = 8, | ||
| 94 | TRANSPORT_PROCESS_TMR = 9, | 89 | TRANSPORT_PROCESS_TMR = 9, |
| 95 | TRANSPORT_TMR_COMPLETE = 10, | ||
| 96 | TRANSPORT_ISTATE_PROCESSING = 11, | 90 | TRANSPORT_ISTATE_PROCESSING = 11, |
| 97 | TRANSPORT_ISTATE_PROCESSED = 12, | ||
| 98 | TRANSPORT_KILL = 13, | ||
| 99 | TRANSPORT_REMOVE = 14, | ||
| 100 | TRANSPORT_FREE = 15, | ||
| 101 | TRANSPORT_NEW_CMD_MAP = 16, | 91 | TRANSPORT_NEW_CMD_MAP = 16, |
| 102 | TRANSPORT_FREE_CMD_INTR = 17, | 92 | TRANSPORT_FREE_CMD_INTR = 17, |
| 103 | TRANSPORT_COMPLETE_QF_WP = 18, | 93 | TRANSPORT_COMPLETE_QF_WP = 18, |
| 94 | TRANSPORT_COMPLETE_QF_OK = 19, | ||
| 104 | }; | 95 | }; |
| 105 | 96 | ||
| 106 | /* Used for struct se_cmd->se_cmd_flags */ | 97 | /* Used for struct se_cmd->se_cmd_flags */ |
| @@ -125,7 +116,6 @@ enum se_cmd_flags_table { | |||
| 125 | SCF_UNUSED = 0x00100000, | 116 | SCF_UNUSED = 0x00100000, |
| 126 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, | 117 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, |
| 127 | SCF_EMULATE_CDB_ASYNC = 0x01000000, | 118 | SCF_EMULATE_CDB_ASYNC = 0x01000000, |
| 128 | SCF_EMULATE_QUEUE_FULL = 0x02000000, | ||
| 129 | }; | 119 | }; |
| 130 | 120 | ||
| 131 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ | 121 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ |
| @@ -401,34 +391,22 @@ struct se_queue_obj { | |||
| 401 | } ____cacheline_aligned; | 391 | } ____cacheline_aligned; |
| 402 | 392 | ||
| 403 | struct se_task { | 393 | struct se_task { |
| 404 | unsigned char task_sense; | ||
| 405 | struct scatterlist *task_sg; | ||
| 406 | u32 task_sg_nents; | ||
| 407 | struct scatterlist *task_sg_bidi; | ||
| 408 | u8 task_scsi_status; | ||
| 409 | u8 task_flags; | ||
| 410 | int task_error_status; | ||
| 411 | int task_state_flags; | ||
| 412 | bool task_padded_sg; | ||
| 413 | unsigned long long task_lba; | 394 | unsigned long long task_lba; |
| 414 | u32 task_no; | 395 | u32 task_sectors; |
| 415 | u32 task_sectors; | 396 | u32 task_size; |
| 416 | u32 task_size; | 397 | struct se_cmd *task_se_cmd; |
| 398 | struct scatterlist *task_sg; | ||
| 399 | u32 task_sg_nents; | ||
| 400 | u16 task_flags; | ||
| 401 | u8 task_sense; | ||
| 402 | u8 task_scsi_status; | ||
| 403 | int task_error_status; | ||
| 417 | enum dma_data_direction task_data_direction; | 404 | enum dma_data_direction task_data_direction; |
| 418 | struct se_cmd *task_se_cmd; | 405 | atomic_t task_state_active; |
| 419 | struct se_device *se_dev; | 406 | struct list_head t_list; |
| 407 | struct list_head t_execute_list; | ||
| 408 | struct list_head t_state_list; | ||
| 420 | struct completion task_stop_comp; | 409 | struct completion task_stop_comp; |
| 421 | atomic_t task_active; | ||
| 422 | atomic_t task_execute_queue; | ||
| 423 | atomic_t task_timeout; | ||
| 424 | atomic_t task_sent; | ||
| 425 | atomic_t task_stop; | ||
| 426 | atomic_t task_state_active; | ||
| 427 | struct timer_list task_timer; | ||
| 428 | struct se_device *se_obj_ptr; | ||
| 429 | struct list_head t_list; | ||
| 430 | struct list_head t_execute_list; | ||
| 431 | struct list_head t_state_list; | ||
| 432 | } ____cacheline_aligned; | 410 | } ____cacheline_aligned; |
| 433 | 411 | ||
| 434 | struct se_cmd { | 412 | struct se_cmd { |
| @@ -446,8 +424,6 @@ struct se_cmd { | |||
| 446 | int sam_task_attr; | 424 | int sam_task_attr; |
| 447 | /* Transport protocol dependent state, see transport_state_table */ | 425 | /* Transport protocol dependent state, see transport_state_table */ |
| 448 | enum transport_state_table t_state; | 426 | enum transport_state_table t_state; |
| 449 | /* Transport protocol dependent state for out of order CmdSNs */ | ||
| 450 | int deferred_t_state; | ||
| 451 | /* Transport specific error status */ | 427 | /* Transport specific error status */ |
| 452 | int transport_error_status; | 428 | int transport_error_status; |
| 453 | /* See se_cmd_flags_table */ | 429 | /* See se_cmd_flags_table */ |
| @@ -461,7 +437,6 @@ struct se_cmd { | |||
| 461 | u32 orig_fe_lun; | 437 | u32 orig_fe_lun; |
| 462 | /* Persistent Reservation key */ | 438 | /* Persistent Reservation key */ |
| 463 | u64 pr_res_key; | 439 | u64 pr_res_key; |
| 464 | atomic_t transport_sent; | ||
| 465 | /* Used for sense data */ | 440 | /* Used for sense data */ |
| 466 | void *sense_buffer; | 441 | void *sense_buffer; |
| 467 | struct list_head se_delayed_node; | 442 | struct list_head se_delayed_node; |
| @@ -479,10 +454,7 @@ struct se_cmd { | |||
| 479 | struct list_head se_queue_node; | 454 | struct list_head se_queue_node; |
| 480 | struct target_core_fabric_ops *se_tfo; | 455 | struct target_core_fabric_ops *se_tfo; |
| 481 | int (*transport_emulate_cdb)(struct se_cmd *); | 456 | int (*transport_emulate_cdb)(struct se_cmd *); |
| 482 | void (*transport_split_cdb)(unsigned long long, u32, unsigned char *); | ||
| 483 | void (*transport_wait_for_tasks)(struct se_cmd *, int, int); | ||
| 484 | void (*transport_complete_callback)(struct se_cmd *); | 457 | void (*transport_complete_callback)(struct se_cmd *); |
| 485 | int (*transport_qf_callback)(struct se_cmd *); | ||
| 486 | 458 | ||
| 487 | unsigned char *t_task_cdb; | 459 | unsigned char *t_task_cdb; |
| 488 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; | 460 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; |
| @@ -495,7 +467,6 @@ struct se_cmd { | |||
| 495 | atomic_t t_se_count; | 467 | atomic_t t_se_count; |
| 496 | atomic_t t_task_cdbs_left; | 468 | atomic_t t_task_cdbs_left; |
| 497 | atomic_t t_task_cdbs_ex_left; | 469 | atomic_t t_task_cdbs_ex_left; |
| 498 | atomic_t t_task_cdbs_timeout_left; | ||
| 499 | atomic_t t_task_cdbs_sent; | 470 | atomic_t t_task_cdbs_sent; |
| 500 | atomic_t t_transport_aborted; | 471 | atomic_t t_transport_aborted; |
| 501 | atomic_t t_transport_active; | 472 | atomic_t t_transport_active; |
| @@ -503,7 +474,6 @@ struct se_cmd { | |||
| 503 | atomic_t t_transport_queue_active; | 474 | atomic_t t_transport_queue_active; |
| 504 | atomic_t t_transport_sent; | 475 | atomic_t t_transport_sent; |
| 505 | atomic_t t_transport_stop; | 476 | atomic_t t_transport_stop; |
| 506 | atomic_t t_transport_timeout; | ||
| 507 | atomic_t transport_dev_active; | 477 | atomic_t transport_dev_active; |
| 508 | atomic_t transport_lun_active; | 478 | atomic_t transport_lun_active; |
| 509 | atomic_t transport_lun_fe_stop; | 479 | atomic_t transport_lun_fe_stop; |
| @@ -514,6 +484,8 @@ struct se_cmd { | |||
| 514 | struct completion transport_lun_stop_comp; | 484 | struct completion transport_lun_stop_comp; |
| 515 | struct scatterlist *t_tasks_sg_chained; | 485 | struct scatterlist *t_tasks_sg_chained; |
| 516 | 486 | ||
| 487 | struct work_struct work; | ||
| 488 | |||
| 517 | /* | 489 | /* |
| 518 | * Used for pre-registered fabric SGL passthrough WRITE and READ | 490 | * Used for pre-registered fabric SGL passthrough WRITE and READ |
| 519 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop | 491 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop |
| @@ -670,7 +642,6 @@ struct se_dev_attrib { | |||
| 670 | u32 optimal_sectors; | 642 | u32 optimal_sectors; |
| 671 | u32 hw_queue_depth; | 643 | u32 hw_queue_depth; |
| 672 | u32 queue_depth; | 644 | u32 queue_depth; |
| 673 | u32 task_timeout; | ||
| 674 | u32 max_unmap_lba_count; | 645 | u32 max_unmap_lba_count; |
| 675 | u32 max_unmap_block_desc_count; | 646 | u32 max_unmap_block_desc_count; |
| 676 | u32 unmap_granularity; | 647 | u32 unmap_granularity; |
diff --git a/include/target/target_core_tmr.h b/include/target/target_core_tmr.h index bd5596807478..d5876e17d3fb 100644 --- a/include/target/target_core_tmr.h +++ b/include/target/target_core_tmr.h | |||
| @@ -27,7 +27,7 @@ enum tcm_tmrsp_table { | |||
| 27 | 27 | ||
| 28 | extern struct kmem_cache *se_tmr_req_cache; | 28 | extern struct kmem_cache *se_tmr_req_cache; |
| 29 | 29 | ||
| 30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8); | 30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8, gfp_t); |
| 31 | extern void core_tmr_release_req(struct se_tmr_req *); | 31 | extern void core_tmr_release_req(struct se_tmr_req *); |
| 32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, | 32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, |
| 33 | struct list_head *, struct se_cmd *); | 33 | struct list_head *, struct se_cmd *); |
diff --git a/include/target/target_core_transport.h b/include/target/target_core_transport.h index 46aae4f94ede..a037a1a6fbba 100644 --- a/include/target/target_core_transport.h +++ b/include/target/target_core_transport.h | |||
| @@ -22,10 +22,9 @@ | |||
| 22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 | 22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 |
| 23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 | 23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 |
| 24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 | 24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 |
| 25 | #define PYX_TRANSPORT_TASK_TIMEOUT -10 | 25 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -10 |
| 26 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -11 | 26 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -11 |
| 27 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -12 | 27 | #define PYX_TRANSPORT_USE_SENSE_REASON -12 |
| 28 | #define PYX_TRANSPORT_USE_SENSE_REASON -13 | ||
| 29 | 28 | ||
| 30 | #ifndef SAM_STAT_RESERVATION_CONFLICT | 29 | #ifndef SAM_STAT_RESERVATION_CONFLICT |
| 31 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 | 30 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 |
| @@ -38,16 +37,6 @@ | |||
| 38 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 | 37 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 |
| 39 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 | 38 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 |
| 40 | 39 | ||
| 41 | /* For SE OBJ Plugins, in seconds */ | ||
| 42 | #define TRANSPORT_TIMEOUT_TUR 10 | ||
| 43 | #define TRANSPORT_TIMEOUT_TYPE_DISK 60 | ||
| 44 | #define TRANSPORT_TIMEOUT_TYPE_ROM 120 | ||
| 45 | #define TRANSPORT_TIMEOUT_TYPE_TAPE 600 | ||
| 46 | #define TRANSPORT_TIMEOUT_TYPE_OTHER 300 | ||
| 47 | |||
| 48 | /* For se_task->task_state_flags */ | ||
| 49 | #define TSF_EXCEPTION_CLEARED 0x01 | ||
| 50 | |||
| 51 | /* | 40 | /* |
| 52 | * struct se_subsystem_dev->su_dev_flags | 41 | * struct se_subsystem_dev->su_dev_flags |
| 53 | */ | 42 | */ |
| @@ -64,8 +53,6 @@ | |||
| 64 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 | 53 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 |
| 65 | 54 | ||
| 66 | /* struct se_dev_attrib sanity values */ | 55 | /* struct se_dev_attrib sanity values */ |
| 67 | /* 10 Minutes */ | ||
| 68 | #define DA_TASK_TIMEOUT_MAX 600 | ||
| 69 | /* Default max_unmap_lba_count */ | 56 | /* Default max_unmap_lba_count */ |
| 70 | #define DA_MAX_UNMAP_LBA_COUNT 0 | 57 | #define DA_MAX_UNMAP_LBA_COUNT 0 |
| 71 | /* Default max_unmap_block_desc_count */ | 58 | /* Default max_unmap_block_desc_count */ |
| @@ -110,16 +97,13 @@ | |||
| 110 | 97 | ||
| 111 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) | 98 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) |
| 112 | 99 | ||
| 113 | struct se_mem; | ||
| 114 | struct se_subsystem_api; | 100 | struct se_subsystem_api; |
| 115 | 101 | ||
| 116 | extern struct kmem_cache *se_mem_cache; | ||
| 117 | |||
| 118 | extern int init_se_kmem_caches(void); | 102 | extern int init_se_kmem_caches(void); |
| 119 | extern void release_se_kmem_caches(void); | 103 | extern void release_se_kmem_caches(void); |
| 120 | extern u32 scsi_get_new_index(scsi_index_t); | 104 | extern u32 scsi_get_new_index(scsi_index_t); |
| 121 | extern void transport_init_queue_obj(struct se_queue_obj *); | 105 | extern void transport_init_queue_obj(struct se_queue_obj *); |
| 122 | extern int transport_subsystem_check_init(void); | 106 | extern void transport_subsystem_check_init(void); |
| 123 | extern int transport_subsystem_register(struct se_subsystem_api *); | 107 | extern int transport_subsystem_register(struct se_subsystem_api *); |
| 124 | extern void transport_subsystem_release(struct se_subsystem_api *); | 108 | extern void transport_subsystem_release(struct se_subsystem_api *); |
| 125 | extern void transport_load_plugins(void); | 109 | extern void transport_load_plugins(void); |
| @@ -134,7 +118,6 @@ extern void transport_free_session(struct se_session *); | |||
| 134 | extern void transport_deregister_session_configfs(struct se_session *); | 118 | extern void transport_deregister_session_configfs(struct se_session *); |
| 135 | extern void transport_deregister_session(struct se_session *); | 119 | extern void transport_deregister_session(struct se_session *); |
| 136 | extern void transport_cmd_finish_abort(struct se_cmd *, int); | 120 | extern void transport_cmd_finish_abort(struct se_cmd *, int); |
| 137 | extern void transport_cmd_finish_abort_tmr(struct se_cmd *); | ||
| 138 | extern void transport_complete_sync_cache(struct se_cmd *, int); | 121 | extern void transport_complete_sync_cache(struct se_cmd *, int); |
| 139 | extern void transport_complete_task(struct se_task *, int); | 122 | extern void transport_complete_task(struct se_task *, int); |
| 140 | extern void transport_add_task_to_execute_queue(struct se_task *, | 123 | extern void transport_add_task_to_execute_queue(struct se_task *, |
| @@ -142,6 +125,8 @@ extern void transport_add_task_to_execute_queue(struct se_task *, | |||
| 142 | struct se_device *); | 125 | struct se_device *); |
| 143 | extern void transport_remove_task_from_execute_queue(struct se_task *, | 126 | extern void transport_remove_task_from_execute_queue(struct se_task *, |
| 144 | struct se_device *); | 127 | struct se_device *); |
| 128 | extern void __transport_remove_task_from_execute_queue(struct se_task *, | ||
| 129 | struct se_device *); | ||
| 145 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); | 130 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); |
| 146 | extern void transport_dump_dev_state(struct se_device *, char *, int *); | 131 | extern void transport_dump_dev_state(struct se_device *, char *, int *); |
| 147 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, | 132 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, |
| @@ -169,29 +154,24 @@ extern void transport_init_se_cmd(struct se_cmd *, | |||
| 169 | unsigned char *); | 154 | unsigned char *); |
| 170 | void *transport_kmap_first_data_page(struct se_cmd *cmd); | 155 | void *transport_kmap_first_data_page(struct se_cmd *cmd); |
| 171 | void transport_kunmap_first_data_page(struct se_cmd *cmd); | 156 | void transport_kunmap_first_data_page(struct se_cmd *cmd); |
| 172 | extern void transport_free_se_cmd(struct se_cmd *); | ||
| 173 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); | 157 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); |
| 174 | extern int transport_generic_handle_cdb(struct se_cmd *); | ||
| 175 | extern int transport_handle_cdb_direct(struct se_cmd *); | 158 | extern int transport_handle_cdb_direct(struct se_cmd *); |
| 176 | extern int transport_generic_handle_cdb_map(struct se_cmd *); | 159 | extern int transport_generic_handle_cdb_map(struct se_cmd *); |
| 177 | extern int transport_generic_handle_data(struct se_cmd *); | 160 | extern int transport_generic_handle_data(struct se_cmd *); |
| 178 | extern void transport_new_cmd_failure(struct se_cmd *); | 161 | extern void transport_new_cmd_failure(struct se_cmd *); |
| 179 | extern int transport_generic_handle_tmr(struct se_cmd *); | 162 | extern int transport_generic_handle_tmr(struct se_cmd *); |
| 180 | extern void transport_generic_free_cmd_intr(struct se_cmd *); | 163 | extern void transport_generic_free_cmd_intr(struct se_cmd *); |
| 181 | extern void __transport_stop_task_timer(struct se_task *, unsigned long *); | 164 | extern bool target_stop_task(struct se_task *task, unsigned long *flags); |
| 182 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, | 165 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, |
| 183 | struct scatterlist *, u32); | 166 | struct scatterlist *, u32); |
| 184 | extern int transport_clear_lun_from_sessions(struct se_lun *); | 167 | extern int transport_clear_lun_from_sessions(struct se_lun *); |
| 168 | extern void transport_wait_for_tasks(struct se_cmd *); | ||
| 185 | extern int transport_check_aborted_status(struct se_cmd *, int); | 169 | extern int transport_check_aborted_status(struct se_cmd *, int); |
| 186 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); | 170 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); |
| 187 | extern void transport_send_task_abort(struct se_cmd *); | 171 | extern void transport_send_task_abort(struct se_cmd *); |
| 188 | extern void transport_release_cmd(struct se_cmd *); | 172 | extern void transport_release_cmd(struct se_cmd *); |
| 189 | extern void transport_generic_free_cmd(struct se_cmd *, int, int); | 173 | extern void transport_generic_free_cmd(struct se_cmd *, int); |
| 190 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); | 174 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); |
| 191 | extern int transport_init_task_sg(struct se_task *, struct se_mem *, u32); | ||
| 192 | extern int transport_map_mem_to_sg(struct se_task *, struct list_head *, | ||
| 193 | struct scatterlist *, struct se_mem *, | ||
| 194 | struct se_mem **, u32 *, u32 *); | ||
| 195 | extern void transport_do_task_sg_chain(struct se_cmd *); | 175 | extern void transport_do_task_sg_chain(struct se_cmd *); |
| 196 | extern void transport_generic_process_write(struct se_cmd *); | 176 | extern void transport_generic_process_write(struct se_cmd *); |
| 197 | extern int transport_generic_new_cmd(struct se_cmd *); | 177 | extern int transport_generic_new_cmd(struct se_cmd *); |
| @@ -200,6 +180,7 @@ extern int transport_generic_do_tmr(struct se_cmd *); | |||
| 200 | extern int core_alua_check_nonop_delay(struct se_cmd *); | 180 | extern int core_alua_check_nonop_delay(struct se_cmd *); |
| 201 | /* From target_core_cdb.c */ | 181 | /* From target_core_cdb.c */ |
| 202 | extern int transport_emulate_control_cdb(struct se_task *); | 182 | extern int transport_emulate_control_cdb(struct se_task *); |
| 183 | extern void target_get_task_cdb(struct se_task *task, unsigned char *cdb); | ||
| 203 | 184 | ||
| 204 | /* | 185 | /* |
| 205 | * Each se_transport_task_t can have N number of possible struct se_task's | 186 | * Each se_transport_task_t can have N number of possible struct se_task's |
| @@ -227,6 +208,10 @@ struct se_subsystem_api { | |||
| 227 | * Transport Type. | 208 | * Transport Type. |
| 228 | */ | 209 | */ |
| 229 | u8 transport_type; | 210 | u8 transport_type; |
| 211 | |||
| 212 | unsigned int fua_write_emulated : 1; | ||
| 213 | unsigned int write_cache_emulated : 1; | ||
| 214 | |||
| 230 | /* | 215 | /* |
| 231 | * struct module for struct se_hba references | 216 | * struct module for struct se_hba references |
| 232 | */ | 217 | */ |
| @@ -236,18 +221,6 @@ struct se_subsystem_api { | |||
| 236 | */ | 221 | */ |
| 237 | struct list_head sub_api_list; | 222 | struct list_head sub_api_list; |
| 238 | /* | 223 | /* |
| 239 | * For SCF_SCSI_NON_DATA_CDB | ||
| 240 | */ | ||
| 241 | int (*cdb_none)(struct se_task *); | ||
| 242 | /* | ||
| 243 | * For SCF_SCSI_DATA_SG_IO_CDB | ||
| 244 | */ | ||
| 245 | int (*map_data_SG)(struct se_task *); | ||
| 246 | /* | ||
| 247 | * For SCF_SCSI_CONTROL_SG_IO_CDB | ||
| 248 | */ | ||
| 249 | int (*map_control_SG)(struct se_task *); | ||
| 250 | /* | ||
| 251 | * attach_hba(): | 224 | * attach_hba(): |
| 252 | */ | 225 | */ |
| 253 | int (*attach_hba)(struct se_hba *, u32); | 226 | int (*attach_hba)(struct se_hba *, u32); |
| @@ -275,22 +248,6 @@ struct se_subsystem_api { | |||
| 275 | void (*free_device)(void *); | 248 | void (*free_device)(void *); |
| 276 | 249 | ||
| 277 | /* | 250 | /* |
| 278 | * dpo_emulated(): | ||
| 279 | */ | ||
| 280 | int (*dpo_emulated)(struct se_device *); | ||
| 281 | /* | ||
| 282 | * fua_write_emulated(): | ||
| 283 | */ | ||
| 284 | int (*fua_write_emulated)(struct se_device *); | ||
| 285 | /* | ||
| 286 | * fua_read_emulated(): | ||
| 287 | */ | ||
| 288 | int (*fua_read_emulated)(struct se_device *); | ||
| 289 | /* | ||
| 290 | * write_cache_emulated(): | ||
| 291 | */ | ||
| 292 | int (*write_cache_emulated)(struct se_device *); | ||
| 293 | /* | ||
| 294 | * transport_complete(): | 251 | * transport_complete(): |
| 295 | * | 252 | * |
| 296 | * Use transport_generic_complete() for majority of DAS transport | 253 | * Use transport_generic_complete() for majority of DAS transport |
| @@ -331,10 +288,6 @@ struct se_subsystem_api { | |||
| 331 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, | 288 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, |
| 332 | char *); | 289 | char *); |
| 333 | /* | 290 | /* |
| 334 | * get_cdb(): | ||
| 335 | */ | ||
| 336 | unsigned char *(*get_cdb)(struct se_task *); | ||
| 337 | /* | ||
| 338 | * get_device_rev(): | 291 | * get_device_rev(): |
| 339 | */ | 292 | */ |
| 340 | u32 (*get_device_rev)(struct se_device *); | 293 | u32 (*get_device_rev)(struct se_device *); |
