aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Grover <agrover@redhat.com>2011-05-02 20:12:10 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2011-07-22 05:37:44 -0400
commita1d8b49abd60ba5d09e7c968731abcb0f8f1cbf6 (patch)
tree8cbfd54b4829fd5f0ed206e15c81c1e626e7701d
parentdd3a5ad8e0c8706659f02c4a72b8c87f6f7ab479 (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.c11
-rw-r--r--drivers/target/target_core_alua.c4
-rw-r--r--drivers/target/target_core_cdb.c39
-rw-r--r--drivers/target/target_core_device.c6
-rw-r--r--drivers/target/target_core_file.c8
-rw-r--r--drivers/target/target_core_iblock.c4
-rw-r--r--drivers/target/target_core_pr.c22
-rw-r--r--drivers/target/target_core_pscsi.c20
-rw-r--r--drivers/target/target_core_rd.c8
-rw-r--r--drivers/target/target_core_tmr.c56
-rw-r--r--drivers/target/target_core_transport.c1008
-rw-r--r--drivers/target/target_core_ua.c2
-rw-r--r--drivers/target/tcm_fc/tfc_cmd.c14
-rw-r--r--drivers/target/tcm_fc/tfc_io.c21
-rw-r--r--include/target/target_core_base.h105
-rw-r--r--include/target/target_core_fabric_ops.h5
-rw-r--r--include/target/target_core_transport.h3
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
621target_emulate_inquiry(struct se_cmd *cmd) 621target_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
666target_emulate_readcapacity(struct se_cmd *cmd) 666target_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
696target_emulate_readcapacity_16(struct se_cmd *cmd) 696target_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
831target_emulate_modesense(struct se_cmd *cmd, int ten) 831target_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)
903static int 903static int
904target_emulate_request_sense(struct se_cmd *cmd) 904target_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;