aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire/fw-sbp2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire/fw-sbp2.c')
-rw-r--r--drivers/firewire/fw-sbp2.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
index fa59e59766e1..2259e2225866 100644
--- a/drivers/firewire/fw-sbp2.c
+++ b/drivers/firewire/fw-sbp2.c
@@ -411,13 +411,13 @@ sbp2_send_management_orb(struct fw_unit *unit, int node_id, int generation,
411 orb->base.request_bus = 411 orb->base.request_bus =
412 dma_map_single(device->card->device, &orb->request, 412 dma_map_single(device->card->device, &orb->request,
413 sizeof orb->request, DMA_TO_DEVICE); 413 sizeof orb->request, DMA_TO_DEVICE);
414 if (orb->base.request_bus == 0) 414 if (dma_mapping_error(orb->base.request_bus))
415 goto out; 415 goto out;
416 416
417 orb->response_bus = 417 orb->response_bus =
418 dma_map_single(device->card->device, &orb->response, 418 dma_map_single(device->card->device, &orb->response,
419 sizeof orb->response, DMA_FROM_DEVICE); 419 sizeof orb->response, DMA_FROM_DEVICE);
420 if (orb->response_bus == 0) 420 if (dma_mapping_error(orb->response_bus))
421 goto out; 421 goto out;
422 422
423 orb->request.response.high = 0; 423 orb->request.response.high = 0;
@@ -963,22 +963,20 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
963 * transfer direction not handled. */ 963 * transfer direction not handled. */
964 if (cmd->sc_data_direction == DMA_BIDIRECTIONAL) { 964 if (cmd->sc_data_direction == DMA_BIDIRECTIONAL) {
965 fw_error("Cannot handle DMA_BIDIRECTIONAL - rejecting command"); 965 fw_error("Cannot handle DMA_BIDIRECTIONAL - rejecting command");
966 cmd->result = DID_ERROR << 16; 966 goto fail_alloc;
967 done(cmd);
968 return 0;
969 } 967 }
970 968
971 orb = kzalloc(sizeof *orb, GFP_ATOMIC); 969 orb = kzalloc(sizeof *orb, GFP_ATOMIC);
972 if (orb == NULL) { 970 if (orb == NULL) {
973 fw_notify("failed to alloc orb\n"); 971 fw_notify("failed to alloc orb\n");
974 cmd->result = DID_NO_CONNECT << 16; 972 goto fail_alloc;
975 done(cmd);
976 return 0;
977 } 973 }
978 974
979 orb->base.request_bus = 975 orb->base.request_bus =
980 dma_map_single(device->card->device, &orb->request, 976 dma_map_single(device->card->device, &orb->request,
981 sizeof orb->request, DMA_TO_DEVICE); 977 sizeof orb->request, DMA_TO_DEVICE);
978 if (dma_mapping_error(orb->base.request_bus))
979 goto fail_mapping;
982 980
983 orb->unit = unit; 981 orb->unit = unit;
984 orb->done = done; 982 orb->done = done;
@@ -1009,9 +1007,7 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
1009 * could we get the scsi or blk layer to do that by 1007 * could we get the scsi or blk layer to do that by
1010 * reporting our max supported block size? */ 1008 * reporting our max supported block size? */
1011 fw_error("command > 64k\n"); 1009 fw_error("command > 64k\n");
1012 cmd->result = DID_ERROR << 16; 1010 goto fail_bufflen;
1013 done(cmd);
1014 return 0;
1015 } else if (cmd->request_bufflen > 0) { 1011 } else if (cmd->request_bufflen > 0) {
1016 sbp2_command_orb_map_buffer(orb); 1012 sbp2_command_orb_map_buffer(orb);
1017 } 1013 }
@@ -1028,6 +1024,16 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
1028 sd->command_block_agent_address + SBP2_ORB_POINTER); 1024 sd->command_block_agent_address + SBP2_ORB_POINTER);
1029 1025
1030 return 0; 1026 return 0;
1027
1028 fail_bufflen:
1029 dma_unmap_single(device->card->device, orb->base.request_bus,
1030 sizeof orb->request, DMA_TO_DEVICE);
1031 fail_mapping:
1032 kfree(orb);
1033 fail_alloc:
1034 cmd->result = DID_ERROR << 16;
1035 done(cmd);
1036 return 0;
1031} 1037}
1032 1038
1033static int sbp2_scsi_slave_alloc(struct scsi_device *sdev) 1039static int sbp2_scsi_slave_alloc(struct scsi_device *sdev)