aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_cdb.c
diff options
context:
space:
mode:
authorAndy Grover <agrover@redhat.com>2011-06-08 13:36:43 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2011-07-22 05:37:48 -0400
commit6708bb27bb2703da238f21f516034263348af5be (patch)
treea23e1f9eab22933d773d6b6ad6263d6751379a00 /drivers/target/target_core_cdb.c
parentec98f7825c6eaa4a9afb0eb518826efc8a2ed4a2 (diff)
target: Follow up core updates from AGrover and HCH (round 4)
This patch contains the squashed version of forth round series cleanups from Andy and Christoph following the post heavy lifting in the preceeding: 'Eliminate usage of struct se_mem' and 'Make all control CDBs scatter-gather' changes. This also includes a conversion of target core and the v3.0 mainline fabric modules (loopback and tcm_fc) to use pr_debug and the CONFIG_DYNAMIC_DEBUG infrastructure! These have been squashed into this third and final round for v3.1. target: Remove ifdeffed code in t_g_process_write target: Remove direct ramdisk code target: Rename task_sg_num to task_sg_nents target: Remove custom debug macros for pr_debug. Use pr_err(). target: Remove custom debug macros in mainline fabrics target: Set WSNZ=1 in block limits VPD. Abort if WRITE_SAME sectors = 0 target: Remove transport do_se_mem_map callback target: Further simplify transport_free_pages target: Redo task allocation return value handling target: Remove extra parentheses target: change alloc_task call to take *cdb, not *cmd (nab: Fix bogus struct file assignments in fd_do_readv and fd_do_writev) Signed-off-by: Andy Grover <agrover@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_cdb.c')
-rw-r--r--drivers/target/target_core_cdb.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
index 418282d926f..98283002366 100644
--- a/drivers/target/target_core_cdb.c
+++ b/drivers/target/target_core_cdb.c
@@ -73,7 +73,7 @@ target_emulate_inquiry_std(struct se_cmd *cmd)
73 * payload going back for EVPD=0 73 * payload going back for EVPD=0
74 */ 74 */
75 if (cmd->data_length < 6) { 75 if (cmd->data_length < 6) {
76 printk(KERN_ERR "SCSI Inquiry payload length: %u" 76 pr_err("SCSI Inquiry payload length: %u"
77 " too small for EVPD=0\n", cmd->data_length); 77 " too small for EVPD=0\n", cmd->data_length);
78 return -EINVAL; 78 return -EINVAL;
79 } 79 }
@@ -327,7 +327,7 @@ check_tpgi:
327 327
328 spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 328 spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
329 tg_pt_gp = tg_pt_gp_mem->tg_pt_gp; 329 tg_pt_gp = tg_pt_gp_mem->tg_pt_gp;
330 if (!(tg_pt_gp)) { 330 if (!tg_pt_gp) {
331 spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 331 spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
332 goto check_lu_gp; 332 goto check_lu_gp;
333 } 333 }
@@ -358,12 +358,12 @@ check_lu_gp:
358 goto check_scsi_name; 358 goto check_scsi_name;
359 } 359 }
360 lu_gp_mem = dev->dev_alua_lu_gp_mem; 360 lu_gp_mem = dev->dev_alua_lu_gp_mem;
361 if (!(lu_gp_mem)) 361 if (!lu_gp_mem)
362 goto check_scsi_name; 362 goto check_scsi_name;
363 363
364 spin_lock(&lu_gp_mem->lu_gp_mem_lock); 364 spin_lock(&lu_gp_mem->lu_gp_mem_lock);
365 lu_gp = lu_gp_mem->lu_gp; 365 lu_gp = lu_gp_mem->lu_gp;
366 if (!(lu_gp)) { 366 if (!lu_gp) {
367 spin_unlock(&lu_gp_mem->lu_gp_mem_lock); 367 spin_unlock(&lu_gp_mem->lu_gp_mem_lock);
368 goto check_scsi_name; 368 goto check_scsi_name;
369 } 369 }
@@ -475,14 +475,14 @@ target_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
475 have_tp = 1; 475 have_tp = 1;
476 476
477 if (cmd->data_length < (0x10 + 4)) { 477 if (cmd->data_length < (0x10 + 4)) {
478 printk(KERN_INFO "Received data_length: %u" 478 pr_debug("Received data_length: %u"
479 " too small for EVPD 0xb0\n", 479 " too small for EVPD 0xb0\n",
480 cmd->data_length); 480 cmd->data_length);
481 return -EINVAL; 481 return -EINVAL;
482 } 482 }
483 483
484 if (have_tp && cmd->data_length < (0x3c + 4)) { 484 if (have_tp && cmd->data_length < (0x3c + 4)) {
485 printk(KERN_INFO "Received data_length: %u" 485 pr_debug("Received data_length: %u"
486 " too small for TPE=1 EVPD 0xb0\n", 486 " too small for TPE=1 EVPD 0xb0\n",
487 cmd->data_length); 487 cmd->data_length);
488 have_tp = 0; 488 have_tp = 0;
@@ -491,6 +491,9 @@ target_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
491 buf[0] = dev->transport->get_device_type(dev); 491 buf[0] = dev->transport->get_device_type(dev);
492 buf[3] = have_tp ? 0x3c : 0x10; 492 buf[3] = have_tp ? 0x3c : 0x10;
493 493
494 /* Set WSNZ to 1 */
495 buf[4] = 0x01;
496
494 /* 497 /*
495 * Set OPTIMAL TRANSFER LENGTH GRANULARITY 498 * Set OPTIMAL TRANSFER LENGTH GRANULARITY
496 */ 499 */
@@ -667,7 +670,7 @@ target_emulate_inquiry(struct se_cmd *cmd)
667 * payload length left for the next outgoing EVPD metadata 670 * payload length left for the next outgoing EVPD metadata
668 */ 671 */
669 if (cmd->data_length < 4) { 672 if (cmd->data_length < 4) {
670 printk(KERN_ERR "SCSI Inquiry payload length: %u" 673 pr_err("SCSI Inquiry payload length: %u"
671 " too small for EVPD=1\n", cmd->data_length); 674 " too small for EVPD=1\n", cmd->data_length);
672 return -EINVAL; 675 return -EINVAL;
673 } 676 }
@@ -685,7 +688,7 @@ target_emulate_inquiry(struct se_cmd *cmd)
685 } 688 }
686 689
687 transport_kunmap_first_data_page(cmd); 690 transport_kunmap_first_data_page(cmd);
688 printk(KERN_ERR "Unknown VPD Code: 0x%02x\n", cdb[2]); 691 pr_err("Unknown VPD Code: 0x%02x\n", cdb[2]);
689 return -EINVAL; 692 return -EINVAL;
690} 693}
691 694
@@ -891,7 +894,7 @@ target_emulate_modesense(struct se_cmd *cmd, int ten)
891 length += target_modesense_control(dev, &buf[offset+length]); 894 length += target_modesense_control(dev, &buf[offset+length]);
892 break; 895 break;
893 default: 896 default:
894 printk(KERN_ERR "Got Unknown Mode Page: 0x%02x\n", 897 pr_err("Got Unknown Mode Page: 0x%02x\n",
895 cdb[2] & 0x3f); 898 cdb[2] & 0x3f);
896 return PYX_TRANSPORT_UNKNOWN_MODE_PAGE; 899 return PYX_TRANSPORT_UNKNOWN_MODE_PAGE;
897 } 900 }
@@ -947,14 +950,14 @@ target_emulate_request_sense(struct se_cmd *cmd)
947 int err = 0; 950 int err = 0;
948 951
949 if (cdb[1] & 0x01) { 952 if (cdb[1] & 0x01) {
950 printk(KERN_ERR "REQUEST_SENSE description emulation not" 953 pr_err("REQUEST_SENSE description emulation not"
951 " supported\n"); 954 " supported\n");
952 return PYX_TRANSPORT_INVALID_CDB_FIELD; 955 return PYX_TRANSPORT_INVALID_CDB_FIELD;
953 } 956 }
954 957
955 buf = transport_kmap_first_data_page(cmd); 958 buf = transport_kmap_first_data_page(cmd);
956 959
957 if (!(core_scsi3_ua_clear_for_request_sense(cmd, &ua_asc, &ua_ascq))) { 960 if (!core_scsi3_ua_clear_for_request_sense(cmd, &ua_asc, &ua_ascq)) {
958 /* 961 /*
959 * CURRENT ERROR, UNIT ATTENTION 962 * CURRENT ERROR, UNIT ATTENTION
960 */ 963 */
@@ -1028,18 +1031,18 @@ target_emulate_unmap(struct se_task *task)
1028 buf = transport_kmap_first_data_page(cmd); 1031 buf = transport_kmap_first_data_page(cmd);
1029 1032
1030 ptr = &buf[offset]; 1033 ptr = &buf[offset];
1031 printk(KERN_INFO "UNMAP: Sub: %s Using dl: %hu bd_dl: %hu size: %hu" 1034 pr_debug("UNMAP: Sub: %s Using dl: %hu bd_dl: %hu size: %hu"
1032 " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr); 1035 " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr);
1033 1036
1034 while (size) { 1037 while (size) {
1035 lba = get_unaligned_be64(&ptr[0]); 1038 lba = get_unaligned_be64(&ptr[0]);
1036 range = get_unaligned_be32(&ptr[8]); 1039 range = get_unaligned_be32(&ptr[8]);
1037 printk(KERN_INFO "UNMAP: Using lba: %llu and range: %u\n", 1040 pr_debug("UNMAP: Using lba: %llu and range: %u\n",
1038 (unsigned long long)lba, range); 1041 (unsigned long long)lba, range);
1039 1042
1040 ret = dev->transport->do_discard(dev, lba, range); 1043 ret = dev->transport->do_discard(dev, lba, range);
1041 if (ret < 0) { 1044 if (ret < 0) {
1042 printk(KERN_ERR "blkdev_issue_discard() failed: %d\n", 1045 pr_err("blkdev_issue_discard() failed: %d\n",
1043 ret); 1046 ret);
1044 goto err; 1047 goto err;
1045 } 1048 }
@@ -1084,12 +1087,12 @@ target_emulate_write_same(struct se_task *task, int write_same32)
1084 else 1087 else
1085 range = (dev->transport->get_blocks(dev) - lba); 1088 range = (dev->transport->get_blocks(dev) - lba);
1086 1089
1087 printk(KERN_INFO "WRITE_SAME UNMAP: LBA: %llu Range: %llu\n", 1090 pr_debug("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n",
1088 (unsigned long long)lba, (unsigned long long)range); 1091 (unsigned long long)lba, (unsigned long long)range);
1089 1092
1090 ret = dev->transport->do_discard(dev, lba, range); 1093 ret = dev->transport->do_discard(dev, lba, range);
1091 if (ret < 0) { 1094 if (ret < 0) {
1092 printk(KERN_INFO "blkdev_issue_discard() failed for WRITE_SAME\n"); 1095 pr_debug("blkdev_issue_discard() failed for WRITE_SAME\n");
1093 return ret; 1096 return ret;
1094 } 1097 }
1095 1098
@@ -1125,7 +1128,7 @@ transport_emulate_control_cdb(struct se_task *task)
1125 ret = target_emulate_readcapacity_16(cmd); 1128 ret = target_emulate_readcapacity_16(cmd);
1126 break; 1129 break;
1127 default: 1130 default:
1128 printk(KERN_ERR "Unsupported SA: 0x%02x\n", 1131 pr_err("Unsupported SA: 0x%02x\n",
1129 cmd->t_task_cdb[1] & 0x1f); 1132 cmd->t_task_cdb[1] & 0x1f);
1130 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1133 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
1131 } 1134 }
@@ -1135,7 +1138,7 @@ transport_emulate_control_cdb(struct se_task *task)
1135 break; 1138 break;
1136 case UNMAP: 1139 case UNMAP:
1137 if (!dev->transport->do_discard) { 1140 if (!dev->transport->do_discard) {
1138 printk(KERN_ERR "UNMAP emulation not supported for: %s\n", 1141 pr_err("UNMAP emulation not supported for: %s\n",
1139 dev->transport->name); 1142 dev->transport->name);
1140 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1143 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
1141 } 1144 }
@@ -1143,7 +1146,7 @@ transport_emulate_control_cdb(struct se_task *task)
1143 break; 1146 break;
1144 case WRITE_SAME_16: 1147 case WRITE_SAME_16:
1145 if (!dev->transport->do_discard) { 1148 if (!dev->transport->do_discard) {
1146 printk(KERN_ERR "WRITE_SAME_16 emulation not supported" 1149 pr_err("WRITE_SAME_16 emulation not supported"
1147 " for: %s\n", dev->transport->name); 1150 " for: %s\n", dev->transport->name);
1148 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1151 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
1149 } 1152 }
@@ -1155,7 +1158,7 @@ transport_emulate_control_cdb(struct se_task *task)
1155 switch (service_action) { 1158 switch (service_action) {
1156 case WRITE_SAME_32: 1159 case WRITE_SAME_32:
1157 if (!dev->transport->do_discard) { 1160 if (!dev->transport->do_discard) {
1158 printk(KERN_ERR "WRITE_SAME_32 SA emulation not" 1161 pr_err("WRITE_SAME_32 SA emulation not"
1159 " supported for: %s\n", 1162 " supported for: %s\n",
1160 dev->transport->name); 1163 dev->transport->name);
1161 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1164 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
@@ -1163,7 +1166,7 @@ transport_emulate_control_cdb(struct se_task *task)
1163 ret = target_emulate_write_same(task, 1); 1166 ret = target_emulate_write_same(task, 1);
1164 break; 1167 break;
1165 default: 1168 default:
1166 printk(KERN_ERR "Unsupported VARIABLE_LENGTH_CMD SA:" 1169 pr_err("Unsupported VARIABLE_LENGTH_CMD SA:"
1167 " 0x%02x\n", service_action); 1170 " 0x%02x\n", service_action);
1168 break; 1171 break;
1169 } 1172 }
@@ -1171,8 +1174,7 @@ transport_emulate_control_cdb(struct se_task *task)
1171 case SYNCHRONIZE_CACHE: 1174 case SYNCHRONIZE_CACHE:
1172 case 0x91: /* SYNCHRONIZE_CACHE_16: */ 1175 case 0x91: /* SYNCHRONIZE_CACHE_16: */
1173 if (!dev->transport->do_sync_cache) { 1176 if (!dev->transport->do_sync_cache) {
1174 printk(KERN_ERR 1177 pr_err("SYNCHRONIZE_CACHE emulation not supported"
1175 "SYNCHRONIZE_CACHE emulation not supported"
1176 " for: %s\n", dev->transport->name); 1178 " for: %s\n", dev->transport->name);
1177 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1179 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
1178 } 1180 }
@@ -1189,7 +1191,7 @@ transport_emulate_control_cdb(struct se_task *task)
1189 case WRITE_FILEMARKS: 1191 case WRITE_FILEMARKS:
1190 break; 1192 break;
1191 default: 1193 default:
1192 printk(KERN_ERR "Unsupported SCSI Opcode: 0x%02x for %s\n", 1194 pr_err("Unsupported SCSI Opcode: 0x%02x for %s\n",
1193 cmd->t_task_cdb[0], dev->transport->name); 1195 cmd->t_task_cdb[0], dev->transport->name);
1194 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE; 1196 return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
1195 } 1197 }