diff options
| author | Andy Grover <agrover@redhat.com> | 2011-05-02 20:12:10 -0400 |
|---|---|---|
| committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-07-22 05:37:44 -0400 |
| commit | a1d8b49abd60ba5d09e7c968731abcb0f8f1cbf6 (patch) | |
| tree | 8cbfd54b4829fd5f0ed206e15c81c1e626e7701d | |
| parent | dd3a5ad8e0c8706659f02c4a72b8c87f6f7ab479 (diff) | |
target: Updates from AGrover and HCH (round 3)
This patch contains a squashed version of third round series cleanups,
improvements ,and simplfications from Andy and Christoph ahead of the
heavy lifting between round 3 -> 4 for the target core SGL conversion.
This include cleanups to the main target I/O path and other miscellaneous
updates.
target: Replace custom sg<->buf functions with lib funcs
target: Simplify sector limiting code
target: get_cdb should never return NULL
target: Simplify transport_memcpy_se_mem_read_contig
target: Use assignment rather than increment for t_task_cdbs
target: Don't pass dma_size to generic_get_mem
target: Pass sg with type scatterlist in transport_map_sg_to_mem
target: Move task_sg_num next to task_sg in struct se_task
target: inline struct se_transport_task into struct se_cmd
target: Change name & semantics of transport_get_sectors()
target: Remove unused members of se_cmd
target: Rename se_cmd.t_task_cdbs to t_task_list_num
target: Fix some spelling
target: Remove unused var from transport_generic_do_tmr
target: map_sg_to_mem: return sg_count in return value
target/pscsi: Use min_t for sector limits
target/pscsi: Unused param for pscsi_get_bio()
target: Rename get_cdb_count to allocate_tasks
target: Make transport_generic_new_cmd() available for iscsi-target
target: Remove fabric callback to allocate iovecs
target: Fix transport_generic_new_cmd WRITE comment
(hch: Use __GFP_ZERO usage for alloc_pages() usage)
Signed-off-by: Andy Grover <agrover@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
| -rw-r--r-- | drivers/target/loopback/tcm_loop.c | 11 | ||||
| -rw-r--r-- | drivers/target/target_core_alua.c | 4 | ||||
| -rw-r--r-- | drivers/target/target_core_cdb.c | 39 | ||||
| -rw-r--r-- | drivers/target/target_core_device.c | 6 | ||||
| -rw-r--r-- | drivers/target/target_core_file.c | 8 | ||||
| -rw-r--r-- | drivers/target/target_core_iblock.c | 4 | ||||
| -rw-r--r-- | drivers/target/target_core_pr.c | 22 | ||||
| -rw-r--r-- | drivers/target/target_core_pscsi.c | 20 | ||||
| -rw-r--r-- | drivers/target/target_core_rd.c | 8 | ||||
| -rw-r--r-- | drivers/target/target_core_tmr.c | 56 | ||||
| -rw-r--r-- | drivers/target/target_core_transport.c | 1008 | ||||
| -rw-r--r-- | drivers/target/target_core_ua.c | 2 | ||||
| -rw-r--r-- | drivers/target/tcm_fc/tfc_cmd.c | 14 | ||||
| -rw-r--r-- | drivers/target/tcm_fc/tfc_io.c | 21 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 105 | ||||
| -rw-r--r-- | include/target/target_core_fabric_ops.h | 5 | ||||
| -rw-r--r-- | include/target/target_core_transport.h | 3 |
17 files changed, 583 insertions, 753 deletions
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index eeb7ee7ab9f7..7ba2542aabe7 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c | |||
| @@ -118,7 +118,7 @@ static struct se_cmd *tcm_loop_allocate_core_cmd( | |||
| 118 | * Signal BIDI usage with T_TASK(cmd)->t_tasks_bidi | 118 | * Signal BIDI usage with T_TASK(cmd)->t_tasks_bidi |
| 119 | */ | 119 | */ |
| 120 | if (scsi_bidi_cmnd(sc)) | 120 | if (scsi_bidi_cmnd(sc)) |
| 121 | se_cmd->t_task.t_tasks_bidi = 1; | 121 | se_cmd->t_tasks_bidi = 1; |
| 122 | /* | 122 | /* |
| 123 | * Locate the struct se_lun pointer and attach it to struct se_cmd | 123 | * Locate the struct se_lun pointer and attach it to struct se_cmd |
| 124 | */ | 124 | */ |
| @@ -169,7 +169,7 @@ static int tcm_loop_new_cmd_map(struct se_cmd *se_cmd) | |||
| 169 | * For BIDI commands, pass in the extra READ buffer | 169 | * For BIDI commands, pass in the extra READ buffer |
| 170 | * to transport_generic_map_mem_to_cmd() below.. | 170 | * to transport_generic_map_mem_to_cmd() below.. |
| 171 | */ | 171 | */ |
| 172 | if (se_cmd->t_task.t_tasks_bidi) { | 172 | if (se_cmd->t_tasks_bidi) { |
| 173 | struct scsi_data_buffer *sdb = scsi_in(sc); | 173 | struct scsi_data_buffer *sdb = scsi_in(sc); |
| 174 | 174 | ||
| 175 | sgl_bidi = sdb->table.sgl; | 175 | sgl_bidi = sdb->table.sgl; |
| @@ -1424,13 +1424,6 @@ static int tcm_loop_register_configfs(void) | |||
| 1424 | &tcm_loop_tpg_release_fabric_acl; | 1424 | &tcm_loop_tpg_release_fabric_acl; |
| 1425 | fabric->tf_ops.tpg_get_inst_index = &tcm_loop_get_inst_index; | 1425 | fabric->tf_ops.tpg_get_inst_index = &tcm_loop_get_inst_index; |
| 1426 | /* | 1426 | /* |
| 1427 | * Since tcm_loop is mapping physical memory from Linux/SCSI | ||
| 1428 | * struct scatterlist arrays for each struct scsi_cmnd I/O, | ||
| 1429 | * we do not need TCM to allocate a iovec array for | ||
| 1430 | * virtual memory address mappings | ||
| 1431 | */ | ||
| 1432 | fabric->tf_ops.alloc_cmd_iovecs = NULL; | ||
| 1433 | /* | ||
| 1434 | * Used for setting up remaining TCM resources in process context | 1427 | * Used for setting up remaining TCM resources in process context |
| 1435 | */ | 1428 | */ |
| 1436 | fabric->tf_ops.new_cmd_map = &tcm_loop_new_cmd_map; | 1429 | fabric->tf_ops.new_cmd_map = &tcm_loop_new_cmd_map; |
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c index 76abd86b6a73..76d506fe99e0 100644 --- a/drivers/target/target_core_alua.c +++ b/drivers/target/target_core_alua.c | |||
| @@ -65,7 +65,7 @@ int core_emulate_report_target_port_groups(struct se_cmd *cmd) | |||
| 65 | struct se_port *port; | 65 | struct se_port *port; |
| 66 | struct t10_alua_tg_pt_gp *tg_pt_gp; | 66 | struct t10_alua_tg_pt_gp *tg_pt_gp; |
| 67 | struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; | 67 | struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; |
| 68 | unsigned char *buf = (unsigned char *)cmd->t_task.t_task_buf; | 68 | unsigned char *buf = (unsigned char *)cmd->t_task_buf; |
| 69 | u32 rd_len = 0, off = 4; /* Skip over RESERVED area to first | 69 | u32 rd_len = 0, off = 4; /* Skip over RESERVED area to first |
| 70 | Target port group descriptor */ | 70 | Target port group descriptor */ |
| 71 | 71 | ||
| @@ -157,7 +157,7 @@ int core_emulate_set_target_port_groups(struct se_cmd *cmd) | |||
| 157 | struct se_node_acl *nacl = cmd->se_sess->se_node_acl; | 157 | struct se_node_acl *nacl = cmd->se_sess->se_node_acl; |
| 158 | struct t10_alua_tg_pt_gp *tg_pt_gp = NULL, *l_tg_pt_gp; | 158 | struct t10_alua_tg_pt_gp *tg_pt_gp = NULL, *l_tg_pt_gp; |
| 159 | struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem, *l_tg_pt_gp_mem; | 159 | struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem, *l_tg_pt_gp_mem; |
| 160 | unsigned char *buf = (unsigned char *)cmd->t_task.t_task_buf; | 160 | unsigned char *buf = (unsigned char *)cmd->t_task_buf; |
| 161 | unsigned char *ptr = &buf[4]; /* Skip over RESERVED area in header */ | 161 | unsigned char *ptr = &buf[4]; /* Skip over RESERVED area in header */ |
| 162 | u32 len = 4; /* Skip over RESERVED area in header */ | 162 | u32 len = 4; /* Skip over RESERVED area in header */ |
| 163 | int alua_access_state, primary = 0, rc; | 163 | int alua_access_state, primary = 0, rc; |
diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c index 8d5a0fc3a220..09ef3f811567 100644 --- a/drivers/target/target_core_cdb.c +++ b/drivers/target/target_core_cdb.c | |||
| @@ -66,7 +66,7 @@ target_emulate_inquiry_std(struct se_cmd *cmd) | |||
| 66 | { | 66 | { |
| 67 | struct se_lun *lun = cmd->se_lun; | 67 | struct se_lun *lun = cmd->se_lun; |
| 68 | struct se_device *dev = cmd->se_dev; | 68 | struct se_device *dev = cmd->se_dev; |
| 69 | unsigned char *buf = cmd->t_task.t_task_buf; | 69 | unsigned char *buf = cmd->t_task_buf; |
| 70 | 70 | ||
| 71 | /* | 71 | /* |
| 72 | * Make sure we at least have 6 bytes of INQUIRY response | 72 | * Make sure we at least have 6 bytes of INQUIRY response |
| @@ -621,8 +621,8 @@ static int | |||
| 621 | target_emulate_inquiry(struct se_cmd *cmd) | 621 | target_emulate_inquiry(struct se_cmd *cmd) |
| 622 | { | 622 | { |
| 623 | struct se_device *dev = cmd->se_dev; | 623 | struct se_device *dev = cmd->se_dev; |
| 624 | unsigned char *buf = cmd->t_task.t_task_buf; | 624 | unsigned char *buf = cmd->t_task_buf; |
| 625 | unsigned char *cdb = cmd->t_task.t_task_cdb; | 625 | unsigned char *cdb = cmd->t_task_cdb; |
| 626 | 626 | ||
| 627 | if (!(cdb[1] & 0x1)) | 627 | if (!(cdb[1] & 0x1)) |
| 628 | return target_emulate_inquiry_std(cmd); | 628 | return target_emulate_inquiry_std(cmd); |
| @@ -666,7 +666,7 @@ static int | |||
| 666 | target_emulate_readcapacity(struct se_cmd *cmd) | 666 | target_emulate_readcapacity(struct se_cmd *cmd) |
| 667 | { | 667 | { |
| 668 | struct se_device *dev = cmd->se_dev; | 668 | struct se_device *dev = cmd->se_dev; |
| 669 | unsigned char *buf = cmd->t_task.t_task_buf; | 669 | unsigned char *buf = cmd->t_task_buf; |
| 670 | unsigned long long blocks_long = dev->transport->get_blocks(dev); | 670 | unsigned long long blocks_long = dev->transport->get_blocks(dev); |
| 671 | u32 blocks; | 671 | u32 blocks; |
| 672 | 672 | ||
| @@ -696,7 +696,7 @@ static int | |||
| 696 | target_emulate_readcapacity_16(struct se_cmd *cmd) | 696 | target_emulate_readcapacity_16(struct se_cmd *cmd) |
| 697 | { | 697 | { |
| 698 | struct se_device *dev = cmd->se_dev; | 698 | struct se_device *dev = cmd->se_dev; |
| 699 | unsigned char *buf = cmd->t_task.t_task_buf; | 699 | unsigned char *buf = cmd->t_task_buf; |
| 700 | unsigned long long blocks = dev->transport->get_blocks(dev); | 700 | unsigned long long blocks = dev->transport->get_blocks(dev); |
| 701 | 701 | ||
| 702 | buf[0] = (blocks >> 56) & 0xff; | 702 | buf[0] = (blocks >> 56) & 0xff; |
| @@ -831,8 +831,8 @@ static int | |||
| 831 | target_emulate_modesense(struct se_cmd *cmd, int ten) | 831 | target_emulate_modesense(struct se_cmd *cmd, int ten) |
| 832 | { | 832 | { |
| 833 | struct se_device *dev = cmd->se_dev; | 833 | struct se_device *dev = cmd->se_dev; |
| 834 | char *cdb = cmd->t_task.t_task_cdb; | 834 | char *cdb = cmd->t_task_cdb; |
| 835 | unsigned char *rbuf = cmd->t_task.t_task_buf; | 835 | unsigned char *rbuf = cmd->t_task_buf; |
| 836 | int type = dev->transport->get_device_type(dev); | 836 | int type = dev->transport->get_device_type(dev); |
| 837 | int offset = (ten) ? 8 : 4; | 837 | int offset = (ten) ? 8 : 4; |
| 838 | int length = 0; | 838 | int length = 0; |
| @@ -903,8 +903,8 @@ target_emulate_modesense(struct se_cmd *cmd, int ten) | |||
| 903 | static int | 903 | static int |
| 904 | target_emulate_request_sense(struct se_cmd *cmd) | 904 | target_emulate_request_sense(struct se_cmd *cmd) |
| 905 | { | 905 | { |
| 906 | unsigned char *cdb = cmd->t_task.t_task_cdb; | 906 | unsigned char *cdb = cmd->t_task_cdb; |
| 907 | unsigned char *buf = cmd->t_task.t_task_buf; | 907 | unsigned char *buf = cmd->t_task_buf; |
| 908 | u8 ua_asc = 0, ua_ascq = 0; | 908 | u8 ua_asc = 0, ua_ascq = 0; |
| 909 | 909 | ||
| 910 | if (cdb[1] & 0x01) { | 910 | if (cdb[1] & 0x01) { |
| @@ -965,8 +965,8 @@ target_emulate_unmap(struct se_task *task) | |||
| 965 | { | 965 | { |
| 966 | struct se_cmd *cmd = task->task_se_cmd; | 966 | struct se_cmd *cmd = task->task_se_cmd; |
| 967 | struct se_device *dev = cmd->se_dev; | 967 | struct se_device *dev = cmd->se_dev; |
| 968 | unsigned char *buf = cmd->t_task.t_task_buf, *ptr = NULL; | 968 | unsigned char *buf = cmd->t_task_buf, *ptr = NULL; |
| 969 | unsigned char *cdb = &cmd->t_task.t_task_cdb[0]; | 969 | unsigned char *cdb = &cmd->t_task_cdb[0]; |
| 970 | sector_t lba; | 970 | sector_t lba; |
| 971 | unsigned int size = cmd->data_length, range; | 971 | unsigned int size = cmd->data_length, range; |
