@ -219,8 +219,14 @@ static void iscsit_determine_counts_for_list(
int check_immediate = 0 ;
u32 burstlength = 0 , offset = 0 ;
u32 unsolicited_data_length = 0 ;
u32 mdsl ;
struct iscsi_conn * conn = cmd - > conn ;
if ( cmd - > se_cmd . data_direction = = DMA_TO_DEVICE )
mdsl = cmd - > conn - > conn_ops - > MaxXmitDataSegmentLength ;
else
mdsl = cmd - > conn - > conn_ops - > MaxRecvDataSegmentLength ;
if ( ( bl - > type = = PDULIST_IMMEDIATE ) | |
( bl - > type = = PDULIST_IMMEDIATE_AND_UNSOLICITED ) )
check_immediate = 1 ;
@ -243,14 +249,13 @@ static void iscsit_determine_counts_for_list(
continue ;
}
if ( unsolicited_data_length > 0 ) {
if ( ( offset + conn - > conn_ops - > MaxRecvDataSegmentLength )
> = cmd - > se_cmd . data_length ) {
if ( ( offset + mdsl ) > = cmd - > se_cmd . data_length ) {
unsolicited_data_length - =
( cmd - > se_cmd . data_length - offset ) ;
offset + = ( cmd - > se_cmd . data_length - offset ) ;
continue ;
}
if ( ( offset + conn - > conn_ops - > MaxRecvDataSegmentLength )
if ( ( offset + mdsl )
> = conn - > sess - > sess_ops - > FirstBurstLength ) {
unsolicited_data_length - =
( conn - > sess - > sess_ops - > FirstBurstLength -
@ -262,17 +267,15 @@ static void iscsit_determine_counts_for_list(
continue ;
}
offset + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
unsolicited_data_length - =
conn - > conn_ops - > MaxRecvDataSegmentLength ;
offset + = mdsl ;
unsolicited_data_length - = mdsl ;
continue ;
}
if ( ( offset + conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
cmd - > se_cmd . data_length ) {
if ( ( offset + mdsl ) > = cmd - > se_cmd . data_length ) {
offset + = ( cmd - > se_cmd . data_length - offset ) ;
continue ;
}
if ( ( burstlength + conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
if ( ( burstlength + mdsl ) > =
conn - > sess - > sess_ops - > MaxBurstLength ) {
offset + = ( conn - > sess - > sess_ops - > MaxBurstLength -
burstlength ) ;
@ -281,8 +284,8 @@ static void iscsit_determine_counts_for_list(
continue ;
}
burstlength + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
offset + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
burstlength + = mdsl ;
offset + = mdsl ;
}
}
@ -296,12 +299,17 @@ static int iscsit_do_build_pdu_and_seq_lists(
struct iscsi_build_list * bl )
{
int check_immediate = 0 , datapduinorder , datasequenceinorder ;
u32 burstlength = 0 , offset = 0 , i = 0 ;
u32 burstlength = 0 , offset = 0 , i = 0 , mdsl ;
u32 pdu_count = 0 , seq_no = 0 , unsolicited_data_length = 0 ;
struct iscsi_conn * conn = cmd - > conn ;
struct iscsi_pdu * pdu = cmd - > pdu_list ;
struct iscsi_seq * seq = cmd - > seq_list ;
if ( cmd - > se_cmd . data_direction = = DMA_TO_DEVICE )
mdsl = cmd - > conn - > conn_ops - > MaxXmitDataSegmentLength ;
else
mdsl = cmd - > conn - > conn_ops - > MaxRecvDataSegmentLength ;
datapduinorder = conn - > sess - > sess_ops - > DataPDUInOrder ;
datasequenceinorder = conn - > sess - > sess_ops - > DataSequenceInOrder ;
@ -348,9 +356,7 @@ static int iscsit_do_build_pdu_and_seq_lists(
continue ;
}
if ( unsolicited_data_length > 0 ) {
if ( ( offset +
conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
cmd - > se_cmd . data_length ) {
if ( ( offset + mdsl ) > = cmd - > se_cmd . data_length ) {
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_UNSOLICITED ;
pdu [ i ] . length =
@ -367,8 +373,7 @@ static int iscsit_do_build_pdu_and_seq_lists(
offset + = ( cmd - > se_cmd . data_length - offset ) ;
continue ;
}
if ( ( offset +
conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
if ( ( offset + mdsl ) > =
conn - > sess - > sess_ops - > FirstBurstLength ) {
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_UNSOLICITED ;
@ -396,17 +401,14 @@ static int iscsit_do_build_pdu_and_seq_lists(
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_UNSOLICITED ;
pdu [ i + + ] . length =
conn - > conn_ops - > MaxRecvDataSegmentLength ;
pdu [ i + + ] . length = mdsl ;
}
burstlength + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
offset + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
unsolicited_data_length - =
conn - > conn_ops - > MaxRecvDataSegmentLength ;
burstlength + = mdsl ;
offset + = mdsl ;
unsolicited_data_length - = mdsl ;
continue ;
}
if ( ( offset + conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
cmd - > se_cmd . data_length ) {
if ( ( offset + mdsl ) > = cmd - > se_cmd . data_length ) {
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_NORMAL ;
pdu [ i ] . length = ( cmd - > se_cmd . data_length - offset ) ;
@ -420,7 +422,7 @@ static int iscsit_do_build_pdu_and_seq_lists(
offset + = ( cmd - > se_cmd . data_length - offset ) ;
continue ;
}
if ( ( burstlength + conn - > conn_ops - > MaxRecvDataSegmentLength ) > =
if ( ( burstlength + mdsl ) > =
conn - > sess - > sess_ops - > MaxBurstLength ) {
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_NORMAL ;
@ -445,11 +447,10 @@ static int iscsit_do_build_pdu_and_seq_lists(
if ( ! datapduinorder ) {
pdu [ i ] . type = PDUTYPE_NORMAL ;
pdu [ i + + ] . length =
conn - > conn_ops - > MaxRecvDataSegmentLength ;
pdu [ i + + ] . length = mdsl ;
}
burstlength + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
offset + = conn - > conn_ops - > MaxRecvDataSegmentLength ;
burstlength + = mdsl ;
offset + = mdsl ;
}
if ( ! datasequenceinorder ) {