aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libiscsi_tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libiscsi_tcp.c')
-rw-r--r--drivers/scsi/libiscsi_tcp.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/drivers/scsi/libiscsi_tcp.c b/drivers/scsi/libiscsi_tcp.c
index 2e0746d70303..5c92620292fb 100644
--- a/drivers/scsi/libiscsi_tcp.c
+++ b/drivers/scsi/libiscsi_tcp.c
@@ -29,6 +29,7 @@
29#include <linux/types.h> 29#include <linux/types.h>
30#include <linux/list.h> 30#include <linux/list.h>
31#include <linux/inet.h> 31#include <linux/inet.h>
32#include <linux/slab.h>
32#include <linux/file.h> 33#include <linux/file.h>
33#include <linux/blkdev.h> 34#include <linux/blkdev.h>
34#include <linux/crypto.h> 35#include <linux/crypto.h>
@@ -445,15 +446,15 @@ void iscsi_tcp_cleanup_task(struct iscsi_task *task)
445 return; 446 return;
446 447
447 /* flush task's r2t queues */ 448 /* flush task's r2t queues */
448 while (__kfifo_get(tcp_task->r2tqueue, (void*)&r2t, sizeof(void*))) { 449 while (kfifo_out(&tcp_task->r2tqueue, (void*)&r2t, sizeof(void*))) {
449 __kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t, 450 kfifo_in(&tcp_task->r2tpool.queue, (void*)&r2t,
450 sizeof(void*)); 451 sizeof(void*));
451 ISCSI_DBG_TCP(task->conn, "pending r2t dropped\n"); 452 ISCSI_DBG_TCP(task->conn, "pending r2t dropped\n");
452 } 453 }
453 454
454 r2t = tcp_task->r2t; 455 r2t = tcp_task->r2t;
455 if (r2t != NULL) { 456 if (r2t != NULL) {
456 __kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t, 457 kfifo_in(&tcp_task->r2tpool.queue, (void*)&r2t,
457 sizeof(void*)); 458 sizeof(void*));
458 tcp_task->r2t = NULL; 459 tcp_task->r2t = NULL;
459 } 460 }
@@ -541,7 +542,7 @@ static int iscsi_tcp_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
541 return 0; 542 return 0;
542 } 543 }
543 544
544 rc = __kfifo_get(tcp_task->r2tpool.queue, (void*)&r2t, sizeof(void*)); 545 rc = kfifo_out(&tcp_task->r2tpool.queue, (void*)&r2t, sizeof(void*));
545 if (!rc) { 546 if (!rc) {
546 iscsi_conn_printk(KERN_ERR, conn, "Could not allocate R2T. " 547 iscsi_conn_printk(KERN_ERR, conn, "Could not allocate R2T. "
547 "Target has sent more R2Ts than it " 548 "Target has sent more R2Ts than it "
@@ -554,7 +555,7 @@ static int iscsi_tcp_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
554 if (r2t->data_length == 0) { 555 if (r2t->data_length == 0) {
555 iscsi_conn_printk(KERN_ERR, conn, 556 iscsi_conn_printk(KERN_ERR, conn,
556 "invalid R2T with zero data len\n"); 557 "invalid R2T with zero data len\n");
557 __kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t, 558 kfifo_in(&tcp_task->r2tpool.queue, (void*)&r2t,
558 sizeof(void*)); 559 sizeof(void*));
559 return ISCSI_ERR_DATALEN; 560 return ISCSI_ERR_DATALEN;
560 } 561 }
@@ -570,7 +571,7 @@ static int iscsi_tcp_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
570 "invalid R2T with data len %u at offset %u " 571 "invalid R2T with data len %u at offset %u "
571 "and total length %d\n", r2t->data_length, 572 "and total length %d\n", r2t->data_length,
572 r2t->data_offset, scsi_out(task->sc)->length); 573 r2t->data_offset, scsi_out(task->sc)->length);
573 __kfifo_put(tcp_task->r2tpool.queue, (void*)&r2t, 574 kfifo_in(&tcp_task->r2tpool.queue, (void*)&r2t,
574 sizeof(void*)); 575 sizeof(void*));
575 return ISCSI_ERR_DATALEN; 576 return ISCSI_ERR_DATALEN;
576 } 577 }
@@ -580,7 +581,7 @@ static int iscsi_tcp_r2t_rsp(struct iscsi_conn *conn, struct iscsi_task *task)
580 r2t->sent = 0; 581 r2t->sent = 0;
581 582
582 tcp_task->exp_datasn = r2tsn + 1; 583 tcp_task->exp_datasn = r2tsn + 1;
583 __kfifo_put(tcp_task->r2tqueue, (void*)&r2t, sizeof(void*)); 584 kfifo_in(&tcp_task->r2tqueue, (void*)&r2t, sizeof(void*));
584 conn->r2t_pdus_cnt++; 585 conn->r2t_pdus_cnt++;
585 586
586 iscsi_requeue_task(task); 587 iscsi_requeue_task(task);
@@ -951,7 +952,7 @@ int iscsi_tcp_task_init(struct iscsi_task *task)
951 return conn->session->tt->init_pdu(task, 0, task->data_count); 952 return conn->session->tt->init_pdu(task, 0, task->data_count);
952 } 953 }
953 954
954 BUG_ON(__kfifo_len(tcp_task->r2tqueue)); 955 BUG_ON(kfifo_len(&tcp_task->r2tqueue));
955 tcp_task->exp_datasn = 0; 956 tcp_task->exp_datasn = 0;
956 957
957 /* Prepare PDU, optionally w/ immediate data */ 958 /* Prepare PDU, optionally w/ immediate data */
@@ -982,7 +983,7 @@ static struct iscsi_r2t_info *iscsi_tcp_get_curr_r2t(struct iscsi_task *task)
982 if (r2t->data_length <= r2t->sent) { 983 if (r2t->data_length <= r2t->sent) {
983 ISCSI_DBG_TCP(task->conn, 984 ISCSI_DBG_TCP(task->conn,
984 " done with r2t %p\n", r2t); 985 " done with r2t %p\n", r2t);
985 __kfifo_put(tcp_task->r2tpool.queue, 986 kfifo_in(&tcp_task->r2tpool.queue,
986 (void *)&tcp_task->r2t, 987 (void *)&tcp_task->r2t,
987 sizeof(void *)); 988 sizeof(void *));
988 tcp_task->r2t = r2t = NULL; 989 tcp_task->r2t = r2t = NULL;
@@ -990,9 +991,12 @@ static struct iscsi_r2t_info *iscsi_tcp_get_curr_r2t(struct iscsi_task *task)
990 } 991 }
991 992
992 if (r2t == NULL) { 993 if (r2t == NULL) {
993 __kfifo_get(tcp_task->r2tqueue, 994 if (kfifo_out(&tcp_task->r2tqueue,
994 (void *)&tcp_task->r2t, sizeof(void *)); 995 (void *)&tcp_task->r2t, sizeof(void *)) !=
995 r2t = tcp_task->r2t; 996 sizeof(void *))
997 r2t = NULL;
998 else
999 r2t = tcp_task->r2t;
996 } 1000 }
997 spin_unlock_bh(&session->lock); 1001 spin_unlock_bh(&session->lock);
998 } 1002 }
@@ -1004,7 +1008,7 @@ static struct iscsi_r2t_info *iscsi_tcp_get_curr_r2t(struct iscsi_task *task)
1004 * iscsi_tcp_task_xmit - xmit normal PDU task 1008 * iscsi_tcp_task_xmit - xmit normal PDU task
1005 * @task: iscsi command task 1009 * @task: iscsi command task
1006 * 1010 *
1007 * We're expected to return 0 when everything was transmitted succesfully, 1011 * We're expected to return 0 when everything was transmitted successfully,
1008 * -EAGAIN if there's still data in the queue, or != 0 for any other kind 1012 * -EAGAIN if there's still data in the queue, or != 0 for any other kind
1009 * of error. 1013 * of error.
1010 */ 1014 */
@@ -1127,9 +1131,8 @@ int iscsi_tcp_r2tpool_alloc(struct iscsi_session *session)
1127 } 1131 }
1128 1132
1129 /* R2T xmit queue */ 1133 /* R2T xmit queue */
1130 tcp_task->r2tqueue = kfifo_alloc( 1134 if (kfifo_alloc(&tcp_task->r2tqueue,
1131 session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL); 1135 session->max_r2t * 4 * sizeof(void*), GFP_KERNEL)) {
1132 if (tcp_task->r2tqueue == ERR_PTR(-ENOMEM)) {
1133 iscsi_pool_free(&tcp_task->r2tpool); 1136 iscsi_pool_free(&tcp_task->r2tpool);
1134 goto r2t_alloc_fail; 1137 goto r2t_alloc_fail;
1135 } 1138 }
@@ -1142,7 +1145,7 @@ r2t_alloc_fail:
1142 struct iscsi_task *task = session->cmds[i]; 1145 struct iscsi_task *task = session->cmds[i];
1143 struct iscsi_tcp_task *tcp_task = task->dd_data; 1146 struct iscsi_tcp_task *tcp_task = task->dd_data;
1144 1147
1145 kfifo_free(tcp_task->r2tqueue); 1148 kfifo_free(&tcp_task->r2tqueue);
1146 iscsi_pool_free(&tcp_task->r2tpool); 1149 iscsi_pool_free(&tcp_task->r2tpool);
1147 } 1150 }
1148 return -ENOMEM; 1151 return -ENOMEM;
@@ -1157,7 +1160,7 @@ void iscsi_tcp_r2tpool_free(struct iscsi_session *session)
1157 struct iscsi_task *task = session->cmds[i]; 1160 struct iscsi_task *task = session->cmds[i];
1158 struct iscsi_tcp_task *tcp_task = task->dd_data; 1161 struct iscsi_tcp_task *tcp_task = task->dd_data;
1159 1162
1160 kfifo_free(tcp_task->r2tqueue); 1163 kfifo_free(&tcp_task->r2tqueue);
1161 iscsi_pool_free(&tcp_task->r2tpool); 1164 iscsi_pool_free(&tcp_task->r2tpool);
1162 } 1165 }
1163} 1166}