@@ -140,15 +140,15 @@ isert_alloc_rx_descriptors(struct isert_conn *isert_conn)
140
140
rx_desc = isert_conn -> rx_descs ;
141
141
142
142
for (i = 0 ; i < ISERT_QP_MAX_RECV_DTOS ; i ++ , rx_desc ++ ) {
143
- dma_addr = ib_dma_map_single (ib_dev , ( void * ) rx_desc ,
144
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
143
+ dma_addr = ib_dma_map_single (ib_dev , rx_desc -> buf ,
144
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
145
145
if (ib_dma_mapping_error (ib_dev , dma_addr ))
146
146
goto dma_map_fail ;
147
147
148
148
rx_desc -> dma_addr = dma_addr ;
149
149
150
150
rx_sg = & rx_desc -> rx_sg ;
151
- rx_sg -> addr = rx_desc -> dma_addr ;
151
+ rx_sg -> addr = rx_desc -> dma_addr + isert_get_hdr_offset ( rx_desc ) ;
152
152
rx_sg -> length = ISER_RX_PAYLOAD_SIZE ;
153
153
rx_sg -> lkey = device -> pd -> local_dma_lkey ;
154
154
rx_desc -> rx_cqe .done = isert_recv_done ;
@@ -160,7 +160,7 @@ isert_alloc_rx_descriptors(struct isert_conn *isert_conn)
160
160
rx_desc = isert_conn -> rx_descs ;
161
161
for (j = 0 ; j < i ; j ++ , rx_desc ++ ) {
162
162
ib_dma_unmap_single (ib_dev , rx_desc -> dma_addr ,
163
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
163
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
164
164
}
165
165
kfree (isert_conn -> rx_descs );
166
166
isert_conn -> rx_descs = NULL ;
@@ -181,7 +181,7 @@ isert_free_rx_descriptors(struct isert_conn *isert_conn)
181
181
rx_desc = isert_conn -> rx_descs ;
182
182
for (i = 0 ; i < ISERT_QP_MAX_RECV_DTOS ; i ++ , rx_desc ++ ) {
183
183
ib_dma_unmap_single (ib_dev , rx_desc -> dma_addr ,
184
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
184
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
185
185
}
186
186
187
187
kfree (isert_conn -> rx_descs );
@@ -299,10 +299,9 @@ isert_free_login_buf(struct isert_conn *isert_conn)
299
299
ISER_RX_PAYLOAD_SIZE , DMA_TO_DEVICE );
300
300
kfree (isert_conn -> login_rsp_buf );
301
301
302
- ib_dma_unmap_single (ib_dev , isert_conn -> login_req_dma ,
303
- ISER_RX_PAYLOAD_SIZE ,
304
- DMA_FROM_DEVICE );
305
- kfree (isert_conn -> login_req_buf );
302
+ ib_dma_unmap_single (ib_dev , isert_conn -> login_desc -> dma_addr ,
303
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
304
+ kfree (isert_conn -> login_desc );
306
305
}
307
306
308
307
static int
@@ -311,25 +310,25 @@ isert_alloc_login_buf(struct isert_conn *isert_conn,
311
310
{
312
311
int ret ;
313
312
314
- isert_conn -> login_req_buf = kzalloc (sizeof (* isert_conn -> login_req_buf ),
313
+ isert_conn -> login_desc = kzalloc (sizeof (* isert_conn -> login_desc ),
315
314
GFP_KERNEL );
316
- if (!isert_conn -> login_req_buf )
315
+ if (!isert_conn -> login_desc )
317
316
return - ENOMEM ;
318
317
319
- isert_conn -> login_req_dma = ib_dma_map_single (ib_dev ,
320
- isert_conn -> login_req_buf ,
321
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
322
- ret = ib_dma_mapping_error (ib_dev , isert_conn -> login_req_dma );
318
+ isert_conn -> login_desc -> dma_addr = ib_dma_map_single (ib_dev ,
319
+ isert_conn -> login_desc -> buf ,
320
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
321
+ ret = ib_dma_mapping_error (ib_dev , isert_conn -> login_desc -> dma_addr );
323
322
if (ret ) {
324
- isert_err ("login_req_dma mapping error: %d\n" , ret );
325
- isert_conn -> login_req_dma = 0 ;
326
- goto out_free_login_req_buf ;
323
+ isert_err ("login_desc dma mapping error: %d\n" , ret );
324
+ isert_conn -> login_desc -> dma_addr = 0 ;
325
+ goto out_free_login_desc ;
327
326
}
328
327
329
328
isert_conn -> login_rsp_buf = kzalloc (ISER_RX_PAYLOAD_SIZE , GFP_KERNEL );
330
329
if (!isert_conn -> login_rsp_buf ) {
331
330
ret = - ENOMEM ;
332
- goto out_unmap_login_req_buf ;
331
+ goto out_unmap_login_desc ;
333
332
}
334
333
335
334
isert_conn -> login_rsp_dma = ib_dma_map_single (ib_dev ,
@@ -346,11 +345,11 @@ isert_alloc_login_buf(struct isert_conn *isert_conn,
346
345
347
346
out_free_login_rsp_buf :
348
347
kfree (isert_conn -> login_rsp_buf );
349
- out_unmap_login_req_buf :
350
- ib_dma_unmap_single (ib_dev , isert_conn -> login_req_dma ,
351
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
352
- out_free_login_req_buf :
353
- kfree (isert_conn -> login_req_buf );
348
+ out_unmap_login_desc :
349
+ ib_dma_unmap_single (ib_dev , isert_conn -> login_desc -> dma_addr ,
350
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
351
+ out_free_login_desc :
352
+ kfree (isert_conn -> login_desc );
354
353
return ret ;
355
354
}
356
355
@@ -476,7 +475,7 @@ isert_connect_release(struct isert_conn *isert_conn)
476
475
if (isert_conn -> qp )
477
476
isert_destroy_qp (isert_conn );
478
477
479
- if (isert_conn -> login_req_buf )
478
+ if (isert_conn -> login_desc )
480
479
isert_free_login_buf (isert_conn );
481
480
482
481
isert_device_put (device );
@@ -862,17 +861,18 @@ isert_login_post_recv(struct isert_conn *isert_conn)
862
861
int ret ;
863
862
864
863
memset (& sge , 0 , sizeof (struct ib_sge ));
865
- sge .addr = isert_conn -> login_req_dma ;
864
+ sge .addr = isert_conn -> login_desc -> dma_addr +
865
+ isert_get_hdr_offset (isert_conn -> login_desc );
866
866
sge .length = ISER_RX_PAYLOAD_SIZE ;
867
867
sge .lkey = isert_conn -> device -> pd -> local_dma_lkey ;
868
868
869
869
isert_dbg ("Setup sge: addr: %llx length: %d 0x%08x\n" ,
870
870
sge .addr , sge .length , sge .lkey );
871
871
872
- isert_conn -> login_req_buf -> rx_cqe .done = isert_login_recv_done ;
872
+ isert_conn -> login_desc -> rx_cqe .done = isert_login_recv_done ;
873
873
874
874
memset (& rx_wr , 0 , sizeof (struct ib_recv_wr ));
875
- rx_wr .wr_cqe = & isert_conn -> login_req_buf -> rx_cqe ;
875
+ rx_wr .wr_cqe = & isert_conn -> login_desc -> rx_cqe ;
876
876
rx_wr .sg_list = & sge ;
877
877
rx_wr .num_sge = 1 ;
878
878
@@ -949,7 +949,7 @@ isert_put_login_tx(struct iscsi_conn *conn, struct iscsi_login *login,
949
949
static void
950
950
isert_rx_login_req (struct isert_conn * isert_conn )
951
951
{
952
- struct iser_rx_desc * rx_desc = isert_conn -> login_req_buf ;
952
+ struct iser_rx_desc * rx_desc = isert_conn -> login_desc ;
953
953
int rx_buflen = isert_conn -> login_req_len ;
954
954
struct iscsi_conn * conn = isert_conn -> conn ;
955
955
struct iscsi_login * login = conn -> conn_login ;
@@ -961,7 +961,7 @@ isert_rx_login_req(struct isert_conn *isert_conn)
961
961
962
962
if (login -> first_request ) {
963
963
struct iscsi_login_req * login_req =
964
- (struct iscsi_login_req * )& rx_desc -> iscsi_header ;
964
+ (struct iscsi_login_req * )isert_get_iscsi_hdr ( rx_desc ) ;
965
965
/*
966
966
* Setup the initial iscsi_login values from the leading
967
967
* login request PDU.
@@ -980,13 +980,13 @@ isert_rx_login_req(struct isert_conn *isert_conn)
980
980
login -> tsih = be16_to_cpu (login_req -> tsih );
981
981
}
982
982
983
- memcpy (& login -> req [0 ], ( void * ) & rx_desc -> iscsi_header , ISCSI_HDR_LEN );
983
+ memcpy (& login -> req [0 ], isert_get_iscsi_hdr ( rx_desc ) , ISCSI_HDR_LEN );
984
984
985
985
size = min (rx_buflen , MAX_KEY_VALUE_PAIRS );
986
986
isert_dbg ("Using login payload size: %d, rx_buflen: %d "
987
987
"MAX_KEY_VALUE_PAIRS: %d\n" , size , rx_buflen ,
988
988
MAX_KEY_VALUE_PAIRS );
989
- memcpy (login -> req_buf , & rx_desc -> data [ 0 ] , size );
989
+ memcpy (login -> req_buf , isert_get_data ( rx_desc ) , size );
990
990
991
991
if (login -> first_request ) {
992
992
complete (& isert_conn -> login_comp );
@@ -1051,14 +1051,15 @@ isert_handle_scsi_cmd(struct isert_conn *isert_conn,
1051
1051
if (imm_data_len != data_len ) {
1052
1052
sg_nents = max (1UL , DIV_ROUND_UP (imm_data_len , PAGE_SIZE ));
1053
1053
sg_copy_from_buffer (cmd -> se_cmd .t_data_sg , sg_nents ,
1054
- & rx_desc -> data [ 0 ] , imm_data_len );
1054
+ isert_get_data ( rx_desc ) , imm_data_len );
1055
1055
isert_dbg ("Copy Immediate sg_nents: %u imm_data_len: %d\n" ,
1056
1056
sg_nents , imm_data_len );
1057
1057
} else {
1058
1058
sg_init_table (& isert_cmd -> sg , 1 );
1059
1059
cmd -> se_cmd .t_data_sg = & isert_cmd -> sg ;
1060
1060
cmd -> se_cmd .t_data_nents = 1 ;
1061
- sg_set_buf (& isert_cmd -> sg , & rx_desc -> data [0 ], imm_data_len );
1061
+ sg_set_buf (& isert_cmd -> sg , isert_get_data (rx_desc ),
1062
+ imm_data_len );
1062
1063
isert_dbg ("Transfer Immediate imm_data_len: %d\n" ,
1063
1064
imm_data_len );
1064
1065
}
@@ -1127,9 +1128,9 @@ isert_handle_iscsi_dataout(struct isert_conn *isert_conn,
1127
1128
}
1128
1129
isert_dbg ("Copying DataOut: sg_start: %p, sg_off: %u "
1129
1130
"sg_nents: %u from %p %u\n" , sg_start , sg_off ,
1130
- sg_nents , & rx_desc -> data [ 0 ] , unsol_data_len );
1131
+ sg_nents , isert_get_data ( rx_desc ) , unsol_data_len );
1131
1132
1132
- sg_copy_from_buffer (sg_start , sg_nents , & rx_desc -> data [ 0 ] ,
1133
+ sg_copy_from_buffer (sg_start , sg_nents , isert_get_data ( rx_desc ) ,
1133
1134
unsol_data_len );
1134
1135
1135
1136
rc = iscsit_check_dataout_payload (cmd , hdr , false);
@@ -1188,7 +1189,7 @@ isert_handle_text_cmd(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd
1188
1189
}
1189
1190
cmd -> text_in_ptr = text_in ;
1190
1191
1191
- memcpy (cmd -> text_in_ptr , & rx_desc -> data [ 0 ] , payload_length );
1192
+ memcpy (cmd -> text_in_ptr , isert_get_data ( rx_desc ) , payload_length );
1192
1193
1193
1194
return iscsit_process_text_cmd (conn , cmd , hdr );
1194
1195
}
@@ -1198,7 +1199,7 @@ isert_rx_opcode(struct isert_conn *isert_conn, struct iser_rx_desc *rx_desc,
1198
1199
uint32_t read_stag , uint64_t read_va ,
1199
1200
uint32_t write_stag , uint64_t write_va )
1200
1201
{
1201
- struct iscsi_hdr * hdr = & rx_desc -> iscsi_header ;
1202
+ struct iscsi_hdr * hdr = isert_get_iscsi_hdr ( rx_desc ) ;
1202
1203
struct iscsi_conn * conn = isert_conn -> conn ;
1203
1204
struct iscsi_cmd * cmd ;
1204
1205
struct isert_cmd * isert_cmd ;
@@ -1296,8 +1297,8 @@ isert_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1296
1297
struct isert_conn * isert_conn = wc -> qp -> qp_context ;
1297
1298
struct ib_device * ib_dev = isert_conn -> cm_id -> device ;
1298
1299
struct iser_rx_desc * rx_desc = cqe_to_rx_desc (wc -> wr_cqe );
1299
- struct iscsi_hdr * hdr = & rx_desc -> iscsi_header ;
1300
- struct iser_ctrl * iser_ctrl = & rx_desc -> iser_header ;
1300
+ struct iscsi_hdr * hdr = isert_get_iscsi_hdr ( rx_desc ) ;
1301
+ struct iser_ctrl * iser_ctrl = isert_get_iser_hdr ( rx_desc ) ;
1301
1302
uint64_t read_va = 0 , write_va = 0 ;
1302
1303
uint32_t read_stag = 0 , write_stag = 0 ;
1303
1304
@@ -1311,7 +1312,7 @@ isert_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1311
1312
rx_desc -> in_use = true;
1312
1313
1313
1314
ib_dma_sync_single_for_cpu (ib_dev , rx_desc -> dma_addr ,
1314
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
1315
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
1315
1316
1316
1317
isert_dbg ("DMA: 0x%llx, iSCSI opcode: 0x%02x, ITT: 0x%08x, flags: 0x%02x dlen: %d\n" ,
1317
1318
rx_desc -> dma_addr , hdr -> opcode , hdr -> itt , hdr -> flags ,
@@ -1346,7 +1347,7 @@ isert_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1346
1347
read_stag , read_va , write_stag , write_va );
1347
1348
1348
1349
ib_dma_sync_single_for_device (ib_dev , rx_desc -> dma_addr ,
1349
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
1350
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
1350
1351
}
1351
1352
1352
1353
static void
@@ -1360,8 +1361,8 @@ isert_login_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1360
1361
return ;
1361
1362
}
1362
1363
1363
- ib_dma_sync_single_for_cpu (ib_dev , isert_conn -> login_req_dma ,
1364
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
1364
+ ib_dma_sync_single_for_cpu (ib_dev , isert_conn -> login_desc -> dma_addr ,
1365
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
1365
1366
1366
1367
isert_conn -> login_req_len = wc -> byte_len - ISER_HEADERS_LEN ;
1367
1368
@@ -1376,8 +1377,8 @@ isert_login_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1376
1377
complete (& isert_conn -> login_req_comp );
1377
1378
mutex_unlock (& isert_conn -> mutex );
1378
1379
1379
- ib_dma_sync_single_for_device (ib_dev , isert_conn -> login_req_dma ,
1380
- ISER_RX_PAYLOAD_SIZE , DMA_FROM_DEVICE );
1380
+ ib_dma_sync_single_for_device (ib_dev , isert_conn -> login_desc -> dma_addr ,
1381
+ ISER_RX_SIZE , DMA_FROM_DEVICE );
1381
1382
}
1382
1383
1383
1384
static void
0 commit comments