diff options
author | Nicholas Bellinger <nab@daterainc.com> | 2013-08-21 17:54:54 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-09-10 19:48:35 -0400 |
commit | b3faa2e87ce04e48f16f3823977329b7c367b3f9 (patch) | |
tree | 796a8722df5ffa66e29936f5cfdf4624e536208a | |
parent | cf6d1f0964fa9db57fc660caf51939d7a03359a1 (diff) |
target/tcm_qla2xxx: Add/use target_reverse_dma_direction() in target_core_fabric.h
Reversing the dma_data_direction for pci_map_sg() friends is useful
for other drivers, so move it from tcm_qla2xxx into inline code
within target_core_fabric.h.
Also drop internal usage of equivlient in tcm_qla2xxx fabric code.
Reported-by: Christoph Hellwig <hch@lst.de>
Cc: Roland Dreier <roland@purestorage.com>
Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
Cc: Chad Dupuis <chad.dupuis@qlogic.com>
Cc: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Nicholas Bellinger <nab@daterainc.com>
-rw-r--r-- | drivers/scsi/qla2xxx/tcm_qla2xxx.c | 31 | ||||
-rw-r--r-- | include/target/target_core_fabric.h | 26 |
2 files changed, 29 insertions, 28 deletions
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 6a93a9126a91..f790fcaf87d4 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c | |||
@@ -497,38 +497,13 @@ static u32 tcm_qla2xxx_sess_get_index(struct se_session *se_sess) | |||
497 | return 0; | 497 | return 0; |
498 | } | 498 | } |
499 | 499 | ||
500 | /* | ||
501 | * The LIO target core uses DMA_TO_DEVICE to mean that data is going | ||
502 | * to the target (eg handling a WRITE) and DMA_FROM_DEVICE to mean | ||
503 | * that data is coming from the target (eg handling a READ). However, | ||
504 | * this is just the opposite of what we have to tell the DMA mapping | ||
505 | * layer -- eg when handling a READ, the HBA will have to DMA the data | ||
506 | * out of memory so it can send it to the initiator, which means we | ||
507 | * need to use DMA_TO_DEVICE when we map the data. | ||
508 | */ | ||
509 | static enum dma_data_direction tcm_qla2xxx_mapping_dir(struct se_cmd *se_cmd) | ||
510 | { | ||
511 | if (se_cmd->se_cmd_flags & SCF_BIDI) | ||
512 | return DMA_BIDIRECTIONAL; | ||
513 | |||
514 | switch (se_cmd->data_direction) { | ||
515 | case DMA_TO_DEVICE: | ||
516 | return DMA_FROM_DEVICE; | ||
517 | case DMA_FROM_DEVICE: | ||
518 | return DMA_TO_DEVICE; | ||
519 | case DMA_NONE: | ||
520 | default: | ||
521 | return DMA_NONE; | ||
522 | } | ||
523 | } | ||
524 | |||
525 | static int tcm_qla2xxx_write_pending(struct se_cmd *se_cmd) | 500 | static int tcm_qla2xxx_write_pending(struct se_cmd *se_cmd) |
526 | { | 501 | { |
527 | struct qla_tgt_cmd *cmd = container_of(se_cmd, | 502 | struct qla_tgt_cmd *cmd = container_of(se_cmd, |
528 | struct qla_tgt_cmd, se_cmd); | 503 | struct qla_tgt_cmd, se_cmd); |
529 | 504 | ||
530 | cmd->bufflen = se_cmd->data_length; | 505 | cmd->bufflen = se_cmd->data_length; |
531 | cmd->dma_data_direction = tcm_qla2xxx_mapping_dir(se_cmd); | 506 | cmd->dma_data_direction = target_reverse_dma_direction(se_cmd); |
532 | 507 | ||
533 | cmd->sg_cnt = se_cmd->t_data_nents; | 508 | cmd->sg_cnt = se_cmd->t_data_nents; |
534 | cmd->sg = se_cmd->t_data_sg; | 509 | cmd->sg = se_cmd->t_data_sg; |
@@ -664,7 +639,7 @@ static int tcm_qla2xxx_queue_data_in(struct se_cmd *se_cmd) | |||
664 | struct qla_tgt_cmd, se_cmd); | 639 | struct qla_tgt_cmd, se_cmd); |
665 | 640 | ||
666 | cmd->bufflen = se_cmd->data_length; | 641 | cmd->bufflen = se_cmd->data_length; |
667 | cmd->dma_data_direction = tcm_qla2xxx_mapping_dir(se_cmd); | 642 | cmd->dma_data_direction = target_reverse_dma_direction(se_cmd); |
668 | cmd->aborted = (se_cmd->transport_state & CMD_T_ABORTED); | 643 | cmd->aborted = (se_cmd->transport_state & CMD_T_ABORTED); |
669 | 644 | ||
670 | cmd->sg_cnt = se_cmd->t_data_nents; | 645 | cmd->sg_cnt = se_cmd->t_data_nents; |
@@ -688,7 +663,7 @@ static int tcm_qla2xxx_queue_status(struct se_cmd *se_cmd) | |||
688 | cmd->sg = NULL; | 663 | cmd->sg = NULL; |
689 | cmd->sg_cnt = 0; | 664 | cmd->sg_cnt = 0; |
690 | cmd->offset = 0; | 665 | cmd->offset = 0; |
691 | cmd->dma_data_direction = tcm_qla2xxx_mapping_dir(se_cmd); | 666 | cmd->dma_data_direction = target_reverse_dma_direction(se_cmd); |
692 | cmd->aborted = (se_cmd->transport_state & CMD_T_ABORTED); | 667 | cmd->aborted = (se_cmd->transport_state & CMD_T_ABORTED); |
693 | 668 | ||
694 | if (se_cmd->data_direction == DMA_FROM_DEVICE) { | 669 | if (se_cmd->data_direction == DMA_FROM_DEVICE) { |
diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index 192eb52684e9..882b650e32be 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h | |||
@@ -179,4 +179,30 @@ u32 iscsi_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl * | |||
179 | char *iscsi_parse_pr_out_transport_id(struct se_portal_group *, const char *, | 179 | char *iscsi_parse_pr_out_transport_id(struct se_portal_group *, const char *, |
180 | u32 *, char **); | 180 | u32 *, char **); |
181 | 181 | ||
182 | /* | ||
183 | * The LIO target core uses DMA_TO_DEVICE to mean that data is going | ||
184 | * to the target (eg handling a WRITE) and DMA_FROM_DEVICE to mean | ||
185 | * that data is coming from the target (eg handling a READ). However, | ||
186 | * this is just the opposite of what we have to tell the DMA mapping | ||
187 | * layer -- eg when handling a READ, the HBA will have to DMA the data | ||
188 | * out of memory so it can send it to the initiator, which means we | ||
189 | * need to use DMA_TO_DEVICE when we map the data. | ||
190 | */ | ||
191 | static inline enum dma_data_direction | ||
192 | target_reverse_dma_direction(struct se_cmd *se_cmd) | ||
193 | { | ||
194 | if (se_cmd->se_cmd_flags & SCF_BIDI) | ||
195 | return DMA_BIDIRECTIONAL; | ||
196 | |||
197 | switch (se_cmd->data_direction) { | ||
198 | case DMA_TO_DEVICE: | ||
199 | return DMA_FROM_DEVICE; | ||
200 | case DMA_FROM_DEVICE: | ||
201 | return DMA_TO_DEVICE; | ||
202 | case DMA_NONE: | ||
203 | default: | ||
204 | return DMA_NONE; | ||
205 | } | ||
206 | } | ||
207 | |||
182 | #endif /* TARGET_CORE_FABRICH */ | 208 | #endif /* TARGET_CORE_FABRICH */ |