diff options
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 117 |
1 files changed, 71 insertions, 46 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 66dade7ab38b..f2d2c7e2c76b 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
@@ -272,7 +272,8 @@ static void srp_path_rec_completion(int status, | |||
272 | 272 | ||
273 | target->status = status; | 273 | target->status = status; |
274 | if (status) | 274 | if (status) |
275 | printk(KERN_ERR PFX "Got failed path rec status %d\n", status); | 275 | shost_printk(KERN_ERR, target->scsi_host, |
276 | PFX "Got failed path rec status %d\n", status); | ||
276 | else | 277 | else |
277 | target->path = *pathrec; | 278 | target->path = *pathrec; |
278 | complete(&target->done); | 279 | complete(&target->done); |
@@ -303,7 +304,8 @@ static int srp_lookup_path(struct srp_target_port *target) | |||
303 | wait_for_completion(&target->done); | 304 | wait_for_completion(&target->done); |
304 | 305 | ||
305 | if (target->status < 0) | 306 | if (target->status < 0) |
306 | printk(KERN_WARNING PFX "Path record query failed\n"); | 307 | shost_printk(KERN_WARNING, target->scsi_host, |
308 | PFX "Path record query failed\n"); | ||
307 | 309 | ||
308 | return target->status; | 310 | return target->status; |
309 | } | 311 | } |
@@ -379,9 +381,10 @@ static int srp_send_req(struct srp_target_port *target) | |||
379 | * the second 8 bytes to the local node GUID. | 381 | * the second 8 bytes to the local node GUID. |
380 | */ | 382 | */ |
381 | if (srp_target_is_topspin(target)) { | 383 | if (srp_target_is_topspin(target)) { |
382 | printk(KERN_DEBUG PFX "Topspin/Cisco initiator port ID workaround " | 384 | shost_printk(KERN_DEBUG, target->scsi_host, |
383 | "activated for target GUID %016llx\n", | 385 | PFX "Topspin/Cisco initiator port ID workaround " |
384 | (unsigned long long) be64_to_cpu(target->ioc_guid)); | 386 | "activated for target GUID %016llx\n", |
387 | (unsigned long long) be64_to_cpu(target->ioc_guid)); | ||
385 | memset(req->priv.initiator_port_id, 0, 8); | 388 | memset(req->priv.initiator_port_id, 0, 8); |
386 | memcpy(req->priv.initiator_port_id + 8, | 389 | memcpy(req->priv.initiator_port_id + 8, |
387 | &target->srp_host->dev->dev->node_guid, 8); | 390 | &target->srp_host->dev->dev->node_guid, 8); |
@@ -400,7 +403,8 @@ static void srp_disconnect_target(struct srp_target_port *target) | |||
400 | 403 | ||
401 | init_completion(&target->done); | 404 | init_completion(&target->done); |
402 | if (ib_send_cm_dreq(target->cm_id, NULL, 0)) { | 405 | if (ib_send_cm_dreq(target->cm_id, NULL, 0)) { |
403 | printk(KERN_DEBUG PFX "Sending CM DREQ failed\n"); | 406 | shost_printk(KERN_DEBUG, target->scsi_host, |
407 | PFX "Sending CM DREQ failed\n"); | ||
404 | return; | 408 | return; |
405 | } | 409 | } |
406 | wait_for_completion(&target->done); | 410 | wait_for_completion(&target->done); |
@@ -568,7 +572,8 @@ static int srp_reconnect_target(struct srp_target_port *target) | |||
568 | return ret; | 572 | return ret; |
569 | 573 | ||
570 | err: | 574 | err: |
571 | printk(KERN_ERR PFX "reconnect failed (%d), removing target port.\n", ret); | 575 | shost_printk(KERN_ERR, target->scsi_host, |
576 | PFX "reconnect failed (%d), removing target port.\n", ret); | ||
572 | 577 | ||
573 | /* | 578 | /* |
574 | * We couldn't reconnect, so kill our target port off. | 579 | * We couldn't reconnect, so kill our target port off. |
@@ -683,8 +688,9 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target, | |||
683 | 688 | ||
684 | if (scmnd->sc_data_direction != DMA_FROM_DEVICE && | 689 | if (scmnd->sc_data_direction != DMA_FROM_DEVICE && |
685 | scmnd->sc_data_direction != DMA_TO_DEVICE) { | 690 | scmnd->sc_data_direction != DMA_TO_DEVICE) { |
686 | printk(KERN_WARNING PFX "Unhandled data direction %d\n", | 691 | shost_printk(KERN_WARNING, target->scsi_host, |
687 | scmnd->sc_data_direction); | 692 | PFX "Unhandled data direction %d\n", |
693 | scmnd->sc_data_direction); | ||
688 | return -EINVAL; | 694 | return -EINVAL; |
689 | } | 695 | } |
690 | 696 | ||
@@ -786,8 +792,9 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | |||
786 | } else { | 792 | } else { |
787 | scmnd = req->scmnd; | 793 | scmnd = req->scmnd; |
788 | if (!scmnd) | 794 | if (!scmnd) |
789 | printk(KERN_ERR "Null scmnd for RSP w/tag %016llx\n", | 795 | shost_printk(KERN_ERR, target->scsi_host, |
790 | (unsigned long long) rsp->tag); | 796 | "Null scmnd for RSP w/tag %016llx\n", |
797 | (unsigned long long) rsp->tag); | ||
791 | scmnd->result = rsp->status; | 798 | scmnd->result = rsp->status; |
792 | 799 | ||
793 | if (rsp->flags & SRP_RSP_FLAG_SNSVALID) { | 800 | if (rsp->flags & SRP_RSP_FLAG_SNSVALID) { |
@@ -831,7 +838,8 @@ static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc) | |||
831 | if (0) { | 838 | if (0) { |
832 | int i; | 839 | int i; |
833 | 840 | ||
834 | printk(KERN_ERR PFX "recv completion, opcode 0x%02x\n", opcode); | 841 | shost_printk(KERN_ERR, target->scsi_host, |
842 | PFX "recv completion, opcode 0x%02x\n", opcode); | ||
835 | 843 | ||
836 | for (i = 0; i < wc->byte_len; ++i) { | 844 | for (i = 0; i < wc->byte_len; ++i) { |
837 | if (i % 8 == 0) | 845 | if (i % 8 == 0) |
@@ -852,11 +860,13 @@ static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc) | |||
852 | 860 | ||
853 | case SRP_T_LOGOUT: | 861 | case SRP_T_LOGOUT: |
854 | /* XXX Handle target logout */ | 862 | /* XXX Handle target logout */ |
855 | printk(KERN_WARNING PFX "Got target logout request\n"); | 863 | shost_printk(KERN_WARNING, target->scsi_host, |
864 | PFX "Got target logout request\n"); | ||
856 | break; | 865 | break; |
857 | 866 | ||
858 | default: | 867 | default: |
859 | printk(KERN_WARNING PFX "Unhandled SRP opcode 0x%02x\n", opcode); | 868 | shost_printk(KERN_WARNING, target->scsi_host, |
869 | PFX "Unhandled SRP opcode 0x%02x\n", opcode); | ||
860 | break; | 870 | break; |
861 | } | 871 | } |
862 | 872 | ||
@@ -872,9 +882,10 @@ static void srp_completion(struct ib_cq *cq, void *target_ptr) | |||
872 | ib_req_notify_cq(cq, IB_CQ_NEXT_COMP); | 882 | ib_req_notify_cq(cq, IB_CQ_NEXT_COMP); |
873 | while (ib_poll_cq(cq, 1, &wc) > 0) { | 883 | while (ib_poll_cq(cq, 1, &wc) > 0) { |
874 | if (wc.status) { | 884 | if (wc.status) { |
875 | printk(KERN_ERR PFX "failed %s status %d\n", | 885 | shost_printk(KERN_ERR, target->scsi_host, |
876 | wc.wr_id & SRP_OP_RECV ? "receive" : "send", | 886 | PFX "failed %s status %d\n", |
877 | wc.status); | 887 | wc.wr_id & SRP_OP_RECV ? "receive" : "send", |
888 | wc.status); | ||
878 | target->qp_in_error = 1; | 889 | target->qp_in_error = 1; |
879 | break; | 890 | break; |
880 | } | 891 | } |
@@ -1027,12 +1038,13 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd, | |||
1027 | 1038 | ||
1028 | len = srp_map_data(scmnd, target, req); | 1039 | len = srp_map_data(scmnd, target, req); |
1029 | if (len < 0) { | 1040 | if (len < 0) { |
1030 | printk(KERN_ERR PFX "Failed to map data\n"); | 1041 | shost_printk(KERN_ERR, target->scsi_host, |
1042 | PFX "Failed to map data\n"); | ||
1031 | goto err; | 1043 | goto err; |
1032 | } | 1044 | } |
1033 | 1045 | ||
1034 | if (__srp_post_recv(target)) { | 1046 | if (__srp_post_recv(target)) { |
1035 | printk(KERN_ERR PFX "Recv failed\n"); | 1047 | shost_printk(KERN_ERR, target->scsi_host, PFX "Recv failed\n"); |
1036 | goto err_unmap; | 1048 | goto err_unmap; |
1037 | } | 1049 | } |
1038 | 1050 | ||
@@ -1040,7 +1052,7 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd, | |||
1040 | DMA_TO_DEVICE); | 1052 | DMA_TO_DEVICE); |
1041 | 1053 | ||
1042 | if (__srp_post_send(target, iu, len)) { | 1054 | if (__srp_post_send(target, iu, len)) { |
1043 | printk(KERN_ERR PFX "Send failed\n"); | 1055 | shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); |
1044 | goto err_unmap; | 1056 | goto err_unmap; |
1045 | } | 1057 | } |
1046 | 1058 | ||
@@ -1095,6 +1107,7 @@ static void srp_cm_rej_handler(struct ib_cm_id *cm_id, | |||
1095 | struct ib_cm_event *event, | 1107 | struct ib_cm_event *event, |
1096 | struct srp_target_port *target) | 1108 | struct srp_target_port *target) |
1097 | { | 1109 | { |
1110 | struct Scsi_Host *shost = target->scsi_host; | ||
1098 | struct ib_class_port_info *cpi; | 1111 | struct ib_class_port_info *cpi; |
1099 | int opcode; | 1112 | int opcode; |
1100 | 1113 | ||
@@ -1120,19 +1133,22 @@ static void srp_cm_rej_handler(struct ib_cm_id *cm_id, | |||
1120 | memcpy(target->path.dgid.raw, | 1133 | memcpy(target->path.dgid.raw, |
1121 | event->param.rej_rcvd.ari, 16); | 1134 | event->param.rej_rcvd.ari, 16); |
1122 | 1135 | ||
1123 | printk(KERN_DEBUG PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n", | 1136 | shost_printk(KERN_DEBUG, shost, |
1124 | (unsigned long long) be64_to_cpu(target->path.dgid.global.subnet_prefix), | 1137 | PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n", |
1125 | (unsigned long long) be64_to_cpu(target->path.dgid.global.interface_id)); | 1138 | (unsigned long long) be64_to_cpu(target->path.dgid.global.subnet_prefix), |
1139 | (unsigned long long) be64_to_cpu(target->path.dgid.global.interface_id)); | ||
1126 | 1140 | ||
1127 | target->status = SRP_PORT_REDIRECT; | 1141 | target->status = SRP_PORT_REDIRECT; |
1128 | } else { | 1142 | } else { |
1129 | printk(KERN_WARNING " REJ reason: IB_CM_REJ_PORT_REDIRECT\n"); | 1143 | shost_printk(KERN_WARNING, shost, |
1144 | " REJ reason: IB_CM_REJ_PORT_REDIRECT\n"); | ||
1130 | target->status = -ECONNRESET; | 1145 | target->status = -ECONNRESET; |
1131 | } | 1146 | } |
1132 | break; | 1147 | break; |
1133 | 1148 | ||
1134 | case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID: | 1149 | case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID: |
1135 | printk(KERN_WARNING " REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n"); | 1150 | shost_printk(KERN_WARNING, shost, |
1151 | " REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n"); | ||
1136 | target->status = -ECONNRESET; | 1152 | target->status = -ECONNRESET; |
1137 | break; | 1153 | break; |
1138 | 1154 | ||
@@ -1143,20 +1159,21 @@ static void srp_cm_rej_handler(struct ib_cm_id *cm_id, | |||
1143 | u32 reason = be32_to_cpu(rej->reason); | 1159 | u32 reason = be32_to_cpu(rej->reason); |
1144 | 1160 | ||
1145 | if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE) | 1161 | if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE) |
1146 | printk(KERN_WARNING PFX | 1162 | shost_printk(KERN_WARNING, shost, |
1147 | "SRP_LOGIN_REJ: requested max_it_iu_len too large\n"); | 1163 | PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n"); |
1148 | else | 1164 | else |
1149 | printk(KERN_WARNING PFX | 1165 | shost_printk(KERN_WARNING, shost, |
1150 | "SRP LOGIN REJECTED, reason 0x%08x\n", reason); | 1166 | PFX "SRP LOGIN REJECTED, reason 0x%08x\n", reason); |
1151 | } else | 1167 | } else |
1152 | printk(KERN_WARNING " REJ reason: IB_CM_REJ_CONSUMER_DEFINED," | 1168 | shost_printk(KERN_WARNING, shost, |
1153 | " opcode 0x%02x\n", opcode); | 1169 | " REJ reason: IB_CM_REJ_CONSUMER_DEFINED," |
1170 | " opcode 0x%02x\n", opcode); | ||
1154 | target->status = -ECONNRESET; | 1171 | target->status = -ECONNRESET; |
1155 | break; | 1172 | break; |
1156 | 1173 | ||
1157 | default: | 1174 | default: |
1158 | printk(KERN_WARNING " REJ reason 0x%x\n", | 1175 | shost_printk(KERN_WARNING, shost, " REJ reason 0x%x\n", |
1159 | event->param.rej_rcvd.reason); | 1176 | event->param.rej_rcvd.reason); |
1160 | target->status = -ECONNRESET; | 1177 | target->status = -ECONNRESET; |
1161 | } | 1178 | } |
1162 | } | 1179 | } |
@@ -1171,7 +1188,8 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event) | |||
1171 | 1188 | ||
1172 | switch (event->event) { | 1189 | switch (event->event) { |
1173 | case IB_CM_REQ_ERROR: | 1190 | case IB_CM_REQ_ERROR: |
1174 | printk(KERN_DEBUG PFX "Sending CM REQ failed\n"); | 1191 | shost_printk(KERN_DEBUG, target->scsi_host, |
1192 | PFX "Sending CM REQ failed\n"); | ||
1175 | comp = 1; | 1193 | comp = 1; |
1176 | target->status = -ECONNRESET; | 1194 | target->status = -ECONNRESET; |
1177 | break; | 1195 | break; |
@@ -1189,7 +1207,8 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event) | |||
1189 | target->scsi_host->can_queue = min(target->req_lim, | 1207 | target->scsi_host->can_queue = min(target->req_lim, |
1190 | target->scsi_host->can_queue); | 1208 | target->scsi_host->can_queue); |
1191 | } else { | 1209 | } else { |
1192 | printk(KERN_WARNING PFX "Unhandled RSP opcode %#x\n", opcode); | 1210 | shost_printk(KERN_WARNING, target->scsi_host, |
1211 | PFX "Unhandled RSP opcode %#x\n", opcode); | ||
1193 | target->status = -ECONNRESET; | 1212 | target->status = -ECONNRESET; |
1194 | break; | 1213 | break; |
1195 | } | 1214 | } |
@@ -1235,20 +1254,23 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event) | |||
1235 | break; | 1254 | break; |
1236 | 1255 | ||
1237 | case IB_CM_REJ_RECEIVED: | 1256 | case IB_CM_REJ_RECEIVED: |
1238 | printk(KERN_DEBUG PFX "REJ received\n"); | 1257 | shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); |
1239 | comp = 1; | 1258 | comp = 1; |
1240 | 1259 | ||
1241 | srp_cm_rej_handler(cm_id, event, target); | 1260 | srp_cm_rej_handler(cm_id, event, target); |
1242 | break; | 1261 | break; |
1243 | 1262 | ||
1244 | case IB_CM_DREQ_RECEIVED: | 1263 | case IB_CM_DREQ_RECEIVED: |
1245 | printk(KERN_WARNING PFX "DREQ received - connection closed\n"); | 1264 | shost_printk(KERN_WARNING, target->scsi_host, |
1265 | PFX "DREQ received - connection closed\n"); | ||
1246 | if (ib_send_cm_drep(cm_id, NULL, 0)) | 1266 | if (ib_send_cm_drep(cm_id, NULL, 0)) |
1247 | printk(KERN_ERR PFX "Sending CM DREP failed\n"); | 1267 | shost_printk(KERN_ERR, target->scsi_host, |
1268 | PFX "Sending CM DREP failed\n"); | ||
1248 | break; | 1269 | break; |
1249 | 1270 | ||
1250 | case IB_CM_TIMEWAIT_EXIT: | 1271 | case IB_CM_TIMEWAIT_EXIT: |
1251 | printk(KERN_ERR PFX "connection closed\n"); | 1272 | shost_printk(KERN_ERR, target->scsi_host, |
1273 | PFX "connection closed\n"); | ||
1252 | 1274 | ||
1253 | comp = 1; | 1275 | comp = 1; |
1254 | target->status = 0; | 1276 | target->status = 0; |
@@ -1260,7 +1282,8 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event) | |||
1260 | break; | 1282 | break; |
1261 | 1283 | ||
1262 | default: | 1284 | default: |
1263 | printk(KERN_WARNING PFX "Unhandled CM event %d\n", event->event); | 1285 | shost_printk(KERN_WARNING, target->scsi_host, |
1286 | PFX "Unhandled CM event %d\n", event->event); | ||
1264 | break; | 1287 | break; |
1265 | } | 1288 | } |
1266 | 1289 | ||
@@ -1337,7 +1360,7 @@ static int srp_abort(struct scsi_cmnd *scmnd) | |||
1337 | struct srp_request *req; | 1360 | struct srp_request *req; |
1338 | int ret = SUCCESS; | 1361 | int ret = SUCCESS; |
1339 | 1362 | ||
1340 | printk(KERN_ERR "SRP abort called\n"); | 1363 | shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); |
1341 | 1364 | ||
1342 | if (target->qp_in_error) | 1365 | if (target->qp_in_error) |
1343 | return FAILED; | 1366 | return FAILED; |
@@ -1367,7 +1390,7 @@ static int srp_reset_device(struct scsi_cmnd *scmnd) | |||
1367 | struct srp_target_port *target = host_to_target(scmnd->device->host); | 1390 | struct srp_target_port *target = host_to_target(scmnd->device->host); |
1368 | struct srp_request *req, *tmp; | 1391 | struct srp_request *req, *tmp; |
1369 | 1392 | ||
1370 | printk(KERN_ERR "SRP reset_device called\n"); | 1393 | shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); |
1371 | 1394 | ||
1372 | if (target->qp_in_error) | 1395 | if (target->qp_in_error) |
1373 | return FAILED; | 1396 | return FAILED; |
@@ -1394,7 +1417,7 @@ static int srp_reset_host(struct scsi_cmnd *scmnd) | |||
1394 | struct srp_target_port *target = host_to_target(scmnd->device->host); | 1417 | struct srp_target_port *target = host_to_target(scmnd->device->host); |
1395 | int ret = FAILED; | 1418 | int ret = FAILED; |
1396 | 1419 | ||
1397 | printk(KERN_ERR PFX "SRP reset_host called\n"); | 1420 | shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); |
1398 | 1421 | ||
1399 | if (!srp_reconnect_target(target)) | 1422 | if (!srp_reconnect_target(target)) |
1400 | ret = SUCCESS; | 1423 | ret = SUCCESS; |
@@ -1820,8 +1843,9 @@ static ssize_t srp_create_target(struct class_device *class_dev, | |||
1820 | 1843 | ||
1821 | ib_get_cached_gid(host->dev->dev, host->port, 0, &target->path.sgid); | 1844 | ib_get_cached_gid(host->dev->dev, host->port, 0, &target->path.sgid); |
1822 | 1845 | ||
1823 | printk(KERN_DEBUG PFX "new target: id_ext %016llx ioc_guid %016llx pkey %04x " | 1846 | shost_printk(KERN_DEBUG, target->scsi_host, PFX |
1824 | "service_id %016llx dgid %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n", | 1847 | "new target: id_ext %016llx ioc_guid %016llx pkey %04x " |
1848 | "service_id %016llx dgid %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n", | ||
1825 | (unsigned long long) be64_to_cpu(target->id_ext), | 1849 | (unsigned long long) be64_to_cpu(target->id_ext), |
1826 | (unsigned long long) be64_to_cpu(target->ioc_guid), | 1850 | (unsigned long long) be64_to_cpu(target->ioc_guid), |
1827 | be16_to_cpu(target->path.pkey), | 1851 | be16_to_cpu(target->path.pkey), |
@@ -1848,7 +1872,8 @@ static ssize_t srp_create_target(struct class_device *class_dev, | |||
1848 | target->qp_in_error = 0; | 1872 | target->qp_in_error = 0; |
1849 | ret = srp_connect_target(target); | 1873 | ret = srp_connect_target(target); |
1850 | if (ret) { | 1874 | if (ret) { |
1851 | printk(KERN_ERR PFX "Connection failed\n"); | 1875 | shost_printk(KERN_ERR, target->scsi_host, |
1876 | PFX "Connection failed\n"); | ||
1852 | goto err_cm_id; | 1877 | goto err_cm_id; |
1853 | } | 1878 | } |
1854 | 1879 | ||