basebuilder_pel7ppc64bebuilder0
6 years ago
12 changed files with 1042 additions and 3 deletions
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
From a54966e121ef5deaee2e113d1c912a7dd85aca86 Mon Sep 17 00:00:00 2001 |
||||
From: Chris Leech <cleech@redhat.com> |
||||
Date: Wed, 20 Jun 2018 22:09:35 -0700 |
||||
Subject: [PATCH 1/1] enable MaxOutstandingR2T negotiation |
||||
|
||||
The iscsi_tcp kernel side R2T handling is in libiscsi_tcp and is shared |
||||
with at least cxgbi3, and the drivers claim CAP_MULTI_R2T. But the |
||||
iscsid login parameter negotiation code never enabled MaxOutstandingR2T. |
||||
|
||||
I've tested this against an LIO target, negotiating to 2 and 4 R2Ts. |
||||
The network traces looked good, with the initiator keeping track of |
||||
multiple outstanding R2Ts and using the correct next identifier. |
||||
Throughput of bulk write data was improved, even over low latency virtio |
||||
links. |
||||
|
||||
Signed-off-by: Chris Leech <cleech@redhat.com> |
||||
--- |
||||
usr/initiator.h | 1 + |
||||
usr/initiator_common.c | 3 ++- |
||||
usr/login.c | 14 +++++--------- |
||||
3 files changed, 8 insertions(+), 10 deletions(-) |
||||
|
||||
diff --git a/usr/initiator.h b/usr/initiator.h |
||||
index 4f96d6b6e2c5..3ee1454b6de2 100644 |
||||
--- a/usr/initiator.h |
||||
+++ b/usr/initiator.h |
||||
@@ -212,6 +212,7 @@ typedef struct iscsi_session { |
||||
int erl; |
||||
uint32_t imm_data_en; |
||||
uint32_t initial_r2t_en; |
||||
+ uint32_t max_r2t; |
||||
uint32_t fast_abort; |
||||
uint32_t first_burst; |
||||
uint32_t max_burst; |
||||
diff --git a/usr/initiator_common.c b/usr/initiator_common.c |
||||
index 191e779bb942..d00bd9e7469b 100644 |
||||
--- a/usr/initiator_common.c |
||||
+++ b/usr/initiator_common.c |
||||
@@ -173,6 +173,7 @@ iscsi_copy_operational_params(struct iscsi_conn *conn, |
||||
|
||||
/* session's operational parameters */ |
||||
session->initial_r2t_en = session_conf->InitialR2T; |
||||
+ session->max_r2t = session_conf->MaxOutstandingR2T; |
||||
session->imm_data_en = session_conf->ImmediateData; |
||||
session->first_burst = align_32_down(session_conf->FirstBurstLength); |
||||
/* |
||||
@@ -375,7 +376,7 @@ int iscsi_session_set_neg_params(struct iscsi_conn *conn) |
||||
.conn_only = 0, |
||||
}, { |
||||
.param = ISCSI_PARAM_MAX_R2T, |
||||
- .value = &one, /* FIXME: session->max_r2t */ |
||||
+ .value = &session->max_r2t, |
||||
.type = ISCSI_INT, |
||||
.conn_only = 0, |
||||
}, { |
||||
diff --git a/usr/login.c b/usr/login.c |
||||
index 294ad0bf73fd..d7dad21180cf 100644 |
||||
--- a/usr/login.c |
||||
+++ b/usr/login.c |
||||
@@ -524,14 +524,9 @@ get_op_params_text_keys(iscsi_session_t *session, int cid, |
||||
text = value_end; |
||||
} else if (iscsi_find_key_value("MaxOutstandingR2T", text, end, &value, |
||||
&value_end)) { |
||||
- if (session->type == ISCSI_SESSION_TYPE_NORMAL) { |
||||
- if (strcmp(value, "1")) { |
||||
- log_error("Login negotiation " |
||||
- "failed, can't accept Max" |
||||
- "OutstandingR2T %s", value); |
||||
- return LOGIN_NEGOTIATION_FAILED; |
||||
- } |
||||
- } else |
||||
+ if (session->type == ISCSI_SESSION_TYPE_NORMAL) |
||||
+ session->max_r2t = strtoul(value, NULL, 0); |
||||
+ else |
||||
session->irrelevant_keys_bitmap |= |
||||
IRRELEVANT_MAXOUTSTANDINGR2T; |
||||
text = value_end; |
||||
@@ -810,8 +805,9 @@ add_params_normal_session(iscsi_session_t *session, struct iscsi_hdr *pdu, |
||||
return 0; |
||||
|
||||
/* these we must have */ |
||||
+ sprintf(value, "%d", session->max_r2t); |
||||
if (!iscsi_add_text(pdu, data, max_data_length, |
||||
- "MaxOutstandingR2T", "1")) |
||||
+ "MaxOutstandingR2T", value)) |
||||
return 0; |
||||
if (!iscsi_add_text(pdu, data, max_data_length, |
||||
"MaxConnections", "1")) |
||||
-- |
||||
2.14.4 |
||||
|
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From 486110e2564cd9b677c485ec87b5df1bcb5750f2 Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Wed, 29 Aug 2018 16:20:27 -0700 |
||||
Subject: [PATCH 184/184] set iscsid.safe_logout to Yes by default |
||||
|
||||
--- |
||||
etc/iscsid.conf | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/etc/iscsid.conf b/etc/iscsid.conf |
||||
index cbf2c05aff59..1af8ed2732de 100644 |
||||
--- a/etc/iscsid.conf |
||||
+++ b/etc/iscsid.conf |
||||
@@ -25,7 +25,7 @@ iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket |
||||
|
||||
# Check for active mounts on devices reachable through a session |
||||
# and refuse to logout if there are any. Defaults to "No". |
||||
-# iscsid.safe_logout = Yes |
||||
+iscsid.safe_logout = Yes |
||||
|
||||
############################# |
||||
# NIC/HBA and driver settings |
||||
-- |
||||
2.14.4 |
||||
|
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: iscsiuio: fix dhcpv6 transaction-id mismatch error |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit 5fd6428435f3063b4e980ead1fe0671856a20183 |
||||
Author: Nilesh Javali <nilesh.javali@cavium.com> |
||||
Date: Thu Feb 16 08:44:19 2017 -0500 |
||||
|
||||
iscsiuio: fix dhcpv6 transaction-id mismatch error |
||||
|
||||
Initialize the transaction-id within the dhcpv6 packet with |
||||
correct byte order. |
||||
|
||||
Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com> |
||||
--- |
||||
iscsiuio/src/apps/dhcpc/dhcpv6.c | 9 +++++++-- |
||||
1 file changed, 7 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/iscsiuio/src/apps/dhcpc/dhcpv6.c b/iscsiuio/src/apps/dhcpc/dhcpv6.c |
||||
index a4e25f0bdbbd..461af0ec2a11 100644 |
||||
--- a/iscsiuio/src/apps/dhcpc/dhcpv6.c |
||||
+++ b/iscsiuio/src/apps/dhcpc/dhcpv6.c |
||||
@@ -153,7 +153,7 @@ static u16_t dhcpv6_init_packet(struct dhcpv6_context *context, u8_t type) |
||||
if (dhcpv6->dhcpv6_type != type) |
||||
context->dhcpv6_transaction_id++; |
||||
|
||||
- dhcpv6->dhcpv6_trans_id = context->dhcpv6_transaction_id; |
||||
+ dhcpv6->dhcpv6_trans_id = HOST_TO_NET16(context->dhcpv6_transaction_id); |
||||
dhcpv6->dhcpv6_type = type; |
||||
|
||||
/* Keep track of length of all DHCP options. */ |
||||
@@ -265,8 +265,13 @@ void ipv6_udp_handle_dhcp(struct dhcpv6_context *context) |
||||
dhcpv6 = (union dhcpv6_hdr *)((u8_t *)context->udp + |
||||
sizeof(struct udp_hdr)); |
||||
|
||||
- if (dhcpv6->dhcpv6_trans_id != context->dhcpv6_transaction_id) |
||||
+ if (dhcpv6->dhcpv6_trans_id != |
||||
+ HOST_TO_NET16(context->dhcpv6_transaction_id)) { |
||||
+ LOG_ERR("DHCPv6 transaction-id error, sent %x, received %x", |
||||
+ HOST_TO_NET16(context->dhcpv6_transaction_id), |
||||
+ dhcpv6->dhcpv6_trans_id); |
||||
return; |
||||
+ } |
||||
|
||||
dhcpv6_len = |
||||
NET_TO_HOST16(context->udp->length) - sizeof(struct udp_hdr); |
@ -0,0 +1,185 @@
@@ -0,0 +1,185 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: iscsiuio: serialize xmit_mutex lock to prevent iscsiuio seg fault |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit a1be9c4ec348f87923f63ce2dbc23893a3b9e45c |
||||
Author: Nilesh Javali <nilesh.javali@cavium.com> |
||||
Date: Thu May 18 23:04:20 2017 +0530 |
||||
|
||||
iscsiuio: serialize xmit_mutex lock to prevent iscsiuio seg fault |
||||
|
||||
Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com> |
||||
--- |
||||
iscsiuio/src/unix/libs/bnx2x.c | 24 +++++++++++------------- |
||||
iscsiuio/src/unix/libs/cnic.c | 9 +++------ |
||||
iscsiuio/src/unix/libs/qedi.c | 19 +++++++++++-------- |
||||
3 files changed, 25 insertions(+), 27 deletions(-) |
||||
|
||||
diff --git a/iscsiuio/src/unix/libs/bnx2x.c b/iscsiuio/src/unix/libs/bnx2x.c |
||||
index 19cbcecaacca..1e8f532edcdf 100644 |
||||
--- a/iscsiuio/src/unix/libs/bnx2x.c |
||||
+++ b/iscsiuio/src/unix/libs/bnx2x.c |
||||
@@ -1316,7 +1316,6 @@ void bnx2x_start_xmit(nic_t *nic, size_t len, u16_t vlan_id) |
||||
if ((rx_bd->addr_hi == 0) && (rx_bd->addr_lo == 0)) { |
||||
LOG_PACKET(PFX "%s: trying to transmit when device is closed", |
||||
nic->log_name); |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
return; |
||||
} |
||||
|
||||
@@ -1343,12 +1342,9 @@ void bnx2x_start_xmit(nic_t *nic, size_t len, u16_t vlan_id) |
||||
(bp->tx_bd_prod << 16)); |
||||
bnx2x_flush_doorbell(bp, bp->tx_doorbell); |
||||
} else { |
||||
- /* If the doorbell is not rung, the packet will not |
||||
- get sent. Hence, the xmit_mutex lock will not |
||||
- get freed. |
||||
- */ |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ LOG_ERR(PFX "Pkt transmission failed."); |
||||
} |
||||
+ |
||||
LOG_PACKET(PFX "%s: sent %d bytes using bp->tx_prod: %d", |
||||
nic->log_name, len, bp->tx_prod); |
||||
} |
||||
@@ -1412,6 +1408,8 @@ int bnx2x_write(nic_t *nic, nic_interface_t *nic_iface, packet_t *pkt) |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ |
||||
return 0; |
||||
} |
||||
|
||||
@@ -1560,17 +1558,16 @@ static int bnx2x_clear_tx_intr(nic_t *nic) |
||||
hw_cons = bp->get_tx_cons(bp); |
||||
|
||||
if (bp->tx_cons == hw_cons) { |
||||
- if (bp->tx_cons == bp->tx_prod) { |
||||
- /* Make sure the xmit_mutex lock is unlock */ |
||||
- if (pthread_mutex_trylock(&nic->xmit_mutex)) |
||||
- LOG_ERR(PFX "bnx2x tx lock with prod == cons"); |
||||
- |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ if (bp->tx_cons == bp->tx_prod) |
||||
return 0; |
||||
- } |
||||
return -EAGAIN; |
||||
} |
||||
|
||||
+ if (pthread_mutex_trylock(&nic->xmit_mutex)) { |
||||
+ LOG_ERR(PFX "%s: unable to get xmit_mutex.", nic->log_name); |
||||
+ return -EINVAL; |
||||
+ } |
||||
+ |
||||
LOG_PACKET(PFX "%s: clearing tx interrupt [%d %d]", |
||||
nic->log_name, bp->tx_cons, hw_cons); |
||||
bp->tx_cons = hw_cons; |
||||
@@ -1600,6 +1597,7 @@ static int bnx2x_clear_tx_intr(nic_t *nic) |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
return 0; |
||||
} |
||||
|
||||
diff --git a/iscsiuio/src/unix/libs/cnic.c b/iscsiuio/src/unix/libs/cnic.c |
||||
index 5d60f898ad57..a009f25f0814 100644 |
||||
--- a/iscsiuio/src/unix/libs/cnic.c |
||||
+++ b/iscsiuio/src/unix/libs/cnic.c |
||||
@@ -141,6 +141,7 @@ static int cnic_arp_send(nic_t *nic, nic_interface_t *nic_iface, int fd, |
||||
memcpy(&addr.s_addr, &dst_ip, sizeof(addr.s_addr)); |
||||
LOG_DEBUG(PFX "%s: Sent cnic arp request for IP: %s", |
||||
nic->log_name, addr_str); |
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
|
||||
return 0; |
||||
} |
||||
@@ -204,6 +205,8 @@ static int cnic_neigh_soliciation_send(nic_t *nic, |
||||
LOG_DEBUG(PFX "%s: Sent cnic ICMPv6 neighbor request %s", |
||||
nic->log_name, addr_str); |
||||
|
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ |
||||
return 0; |
||||
} |
||||
|
||||
@@ -433,9 +436,6 @@ done: |
||||
rc = -EIO; |
||||
} |
||||
|
||||
- if (status != 0 || rc != 0) |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
- |
||||
if (ev) { |
||||
cnic_nl_neigh_rsp(nic, fd, ev, path, mac_addr, |
||||
nic_iface, status, AF_INET); |
||||
@@ -632,9 +632,6 @@ done: |
||||
rc = -EIO; |
||||
} |
||||
|
||||
- if (status != 0 || rc != 0) |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
- |
||||
if (ev) { |
||||
cnic_nl_neigh_rsp(nic, fd, ev, path, mac_addr, |
||||
nic_iface, status, AF_INET6); |
||||
diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c |
||||
index c2096e59dad1..c6ff6e7724a3 100644 |
||||
--- a/iscsiuio/src/unix/libs/qedi.c |
||||
+++ b/iscsiuio/src/unix/libs/qedi.c |
||||
@@ -887,7 +887,6 @@ void qedi_start_xmit(nic_t *nic, size_t len, u16_t vlan_id) |
||||
nic->log_name, len, bp->tx_prod); |
||||
} else { |
||||
LOG_ERR(PFX "Pkt transmission failed: %d", rc); |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
} |
||||
|
||||
free(ubuf); |
||||
@@ -950,6 +949,10 @@ int qedi_write(nic_t *nic, nic_interface_t *nic_iface, packet_t *pkt) |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - releasing xmit mutex", |
||||
+ nic->log_name, nic->host_no); |
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ |
||||
return 0; |
||||
} |
||||
|
||||
@@ -1059,17 +1062,16 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
hw_cons = uctrl->hw_tx_cons; |
||||
|
||||
if (bp->tx_cons == hw_cons) { |
||||
- if (bp->tx_cons == bp->tx_prod) { |
||||
- /* Make sure the xmit_mutex lock is unlock */ |
||||
- if (pthread_mutex_trylock(&nic->xmit_mutex)) |
||||
- LOG_ERR(PFX "qedi tx lock with prod == cons"); |
||||
- |
||||
- pthread_mutex_unlock(&nic->xmit_mutex); |
||||
+ if (bp->tx_cons == bp->tx_prod) |
||||
return 0; |
||||
- } |
||||
return -EAGAIN; |
||||
} |
||||
|
||||
+ if (pthread_mutex_trylock(&nic->xmit_mutex)) { |
||||
+ LOG_ERR(PFX "%s: unable to get xmit_mutex.", nic->log_name); |
||||
+ return -EINVAL; |
||||
+ } |
||||
+ |
||||
LOG_PACKET(PFX "%s: clearing tx interrupt [%d %d]", |
||||
nic->log_name, bp->tx_cons, hw_cons); |
||||
bp->tx_cons = hw_cons; |
||||
@@ -1099,6 +1101,7 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
+ pthread_mutex_unlock(&nic->xmit_mutex); |
||||
return 0; |
||||
} |
||||
|
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: iscsiuio: allow ARP for non-matching src and dst addresses |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit e43d687dc23e66c609491f9bfa8d8f29be7ef72d |
||||
Author: Nilesh Javali <nilesh.javali@cavium.com> |
||||
Date: Thu Feb 22 07:25:58 2018 -0500 |
||||
|
||||
iscsiuio: allow ARP for non-matching src and dst addresses |
||||
|
||||
For source and destination IP addresses in different |
||||
networks, continue with the ARP retries and further login process |
||||
instead of assuming abrupt failure. iSCSI offload adapters may not rely on |
||||
netmask information for successful iSCSI target login. |
||||
|
||||
Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com> |
||||
--- |
||||
iscsiuio/src/unix/libs/cnic.c | 5 ++--- |
||||
1 file changed, 2 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/iscsiuio/src/unix/libs/cnic.c b/iscsiuio/src/unix/libs/cnic.c |
||||
index a009f25f0814..32166edf243f 100644 |
||||
--- a/iscsiuio/src/unix/libs/cnic.c |
||||
+++ b/iscsiuio/src/unix/libs/cnic.c |
||||
@@ -362,9 +362,8 @@ int cnic_handle_ipv4_iscsi_path_req(nic_t *nic, int fd, |
||||
&nic_iface->ustack.default_route_addr, |
||||
sizeof(dst_addr)); |
||||
} else { |
||||
- arp_retry = MAX_ARP_RETRY; |
||||
- LOG_DEBUG(PFX "%s: no default", nic->log_name); |
||||
- goto done; |
||||
+ LOG_DEBUG(PFX "%s: no default route address", |
||||
+ nic->log_name); |
||||
} |
||||
} |
||||
arp_retry = 0; |
@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: iscsiuio: v0.7.8.4 |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit 5481f86e46d1668917bbf41ed2355b6eb558de69 |
||||
Author: Nilesh Javali <nilesh.javali@cavium.com> |
||||
Date: Thu Feb 22 08:04:13 2018 -0500 |
||||
|
||||
iscsiuio: v0.7.8.4 |
||||
|
||||
Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com> |
||||
--- |
||||
iscsiuio/README | 4 ++-- |
||||
iscsiuio/RELEASE.TXT | 39 +++++++++++++++++++++++++++++++++++++-- |
||||
iscsiuio/configure.ac | 4 ++-- |
||||
3 files changed, 41 insertions(+), 6 deletions(-) |
||||
|
||||
diff --git a/iscsiuio/README b/iscsiuio/README |
||||
index ca2da16a7342..9cbf7ce6717a 100644 |
||||
--- a/iscsiuio/README |
||||
+++ b/iscsiuio/README |
||||
@@ -1,6 +1,6 @@ |
||||
Iscsiuio Userspace Tool |
||||
-Version 0.7.8.3 |
||||
-Sept 28, 2016 |
||||
+Version 0.7.8.4 |
||||
+Feb 22, 2018 |
||||
------------------------------------------------------ |
||||
|
||||
This tool is to be used in conjunction with the QLogic NetXtreme II Linux |
||||
diff --git a/iscsiuio/RELEASE.TXT b/iscsiuio/RELEASE.TXT |
||||
index 69c5b5f6bd61..ca51b26338a1 100644 |
||||
--- a/iscsiuio/RELEASE.TXT |
||||
+++ b/iscsiuio/RELEASE.TXT |
||||
@@ -1,7 +1,7 @@ |
||||
Release Notes |
||||
QLogic uIP Linux Driver |
||||
- Version 0.7.8.3 |
||||
- 9/28/2016 |
||||
+ Version 0.7.8.4 |
||||
+ 2/22/2018 |
||||
|
||||
QLogic Corporation |
||||
26650 Aliso Viejo Pkwy, |
||||
@@ -12,6 +12,41 @@ |
||||
All rights reserved |
||||
|
||||
|
||||
+ |
||||
+uIP v0.7.8.4 (Feb 22, 2018) |
||||
+======================================================= |
||||
+ Fixes: |
||||
+ ------- |
||||
+ 1. Problem: CQ95605: iSCSI BFS in DHCP config intermittently fails to boot |
||||
+ into the OS when source and destination addresses are in |
||||
+ different networks. |
||||
+ Change: Allow ARP for non-matching source and destination addresses. |
||||
+ For source and destination IP addresses in different networks, |
||||
+ continue with the ARP retries and further login process |
||||
+ instead of assuming abrupt failure. iSCSI offload adapters |
||||
+ may not rely on netmask information for successful iSCSI |
||||
+ target login. |
||||
+ Impact: All |
||||
+ |
||||
+uIP v0.7.8.3 (May 18, 2017) |
||||
+======================================================= |
||||
+ Fixes: |
||||
+ ------- |
||||
+ 1. Problem: CQ93985: iscsiuio seg faults if discovery done to not |
||||
+ reachable target |
||||
+ Change: Serialize xmit_mutex lock to prevent iscsiuio seg fault. |
||||
+ Impact: All |
||||
+ |
||||
+ 2. Problem: CQ91497 - Initiator fails to acquire IPv6 DHCP address |
||||
+ from the DHCP server |
||||
+ Change: Initialize the transaction-id within the dhcpv6 packet with |
||||
+ correct byte order, to fix the trans-id mismatch error. |
||||
+ Impact: All |
||||
+ |
||||
+ 3. Problem: Missing qedi ping transport hook |
||||
+ Change: Add qedi ping transport hook |
||||
+ Impact: 10/25/40/50GGbE Controller (iSCSI) |
||||
+ |
||||
uIP v0.7.8.3 (Sept 28, 2016) |
||||
======================================================= |
||||
Enhancements |
||||
diff --git a/iscsiuio/configure.ac b/iscsiuio/configure.ac |
||||
index 075d07d04f34..fa67ea74c47a 100644 |
||||
--- a/iscsiuio/configure.ac |
||||
+++ b/iscsiuio/configure.ac |
||||
@@ -12,9 +12,9 @@ dnl Benjamin Li (benli@broadcom.com) |
||||
dnl |
||||
|
||||
PACKAGE=iscsiuio |
||||
-VERSION=0.7.8.3 |
||||
+VERSION=0.7.8.4 |
||||
|
||||
-AC_INIT([iscsiuio], [0.7.8.3], [QLogic-Storage-Upstream@cavium.com]) |
||||
+AC_INIT([iscsiuio], [0.7.8.4], [QLogic-Storage-Upstream@cavium.com]) |
||||
|
||||
AM_INIT_AUTOMAKE |
||||
AC_CONFIG_HEADER(config.h) |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: qedi.c: Removed unused linux/ethtool.h |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit 197713ad7e3e944102bbd792e1ab9ec4a67100c0 |
||||
Author: Khem Raj <raj.khem@gmail.com> |
||||
Date: Fri Feb 2 23:25:21 2018 -0800 |
||||
|
||||
qedi.c: Removed unused linux/ethtool.h |
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com> |
||||
--- |
||||
iscsiuio/src/unix/libs/qedi.c | 1 - |
||||
1 file changed, 1 deletion(-) |
||||
|
||||
diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c |
||||
index b81fecdfe78f..24cb89ad3580 100644 |
||||
--- a/iscsiuio/src/unix/libs/qedi.c |
||||
+++ b/iscsiuio/src/unix/libs/qedi.c |
||||
@@ -49,7 +49,6 @@ |
||||
#include <arpa/inet.h> |
||||
#include <linux/types.h> |
||||
#include <linux/sockios.h> |
||||
-#include <linux/ethtool.h> |
||||
#include <linux/netlink.h> |
||||
#include <sys/mman.h> |
||||
#include <sys/ioctl.h> |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
From: Chris Leech <cleech@redhat.com> |
||||
Subject: Fix iscsiuio segfault when shutting down. |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit 2bdcae8a9969295183377342cfe218d1c5d263db |
||||
Author: Lee Duncan <lduncan@suse.com> |
||||
Date: Thu May 31 08:42:58 2018 -0700 |
||||
|
||||
Fix iscsiuio segfault when shutting down. |
||||
|
||||
If iscsiuio is stopped when first starting up, it can easily |
||||
hit a window where pthread_cancel() is called before pthread_create() |
||||
finishesx The problem was found by kiyo@jp.fujitsu.com, who also |
||||
proposed the fix. |
||||
--- |
||||
iscsiuio/src/unix/iscsid_ipc.c | 3 ++- |
||||
1 file changed, 2 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/iscsiuio/src/unix/iscsid_ipc.c b/iscsiuio/src/unix/iscsid_ipc.c |
||||
index d4322350fcf6..2acac485af72 100644 |
||||
--- a/iscsiuio/src/unix/iscsid_ipc.c |
||||
+++ b/iscsiuio/src/unix/iscsid_ipc.c |
||||
@@ -1245,7 +1245,8 @@ void iscsid_cleanup() |
||||
{ |
||||
int rc; |
||||
|
||||
- if (iscsid_opts.fd != INVALID_FD) { |
||||
+ if (iscsid_opts.fd != INVALID_FD && |
||||
+ iscsid_opts.thread != INVALID_THREAD) { |
||||
rc = pthread_cancel(iscsid_opts.thread); |
||||
if (rc != 0) { |
||||
LOG_ERR("Could not cancel iscsid listening thread: %s", |
@ -0,0 +1,208 @@
@@ -0,0 +1,208 @@
|
||||
From 2cee7f4a011619480c83d8279fe5d15de6e37ea8 Mon Sep 17 00:00:00 2001 |
||||
From: Chris Leech <cleech@redhat.com> |
||||
Date: Fri, 22 Jun 2018 12:25:05 -0700 |
||||
Subject: [PATCH 1/1] vlan setting sync across ipv4/ipv6 for be2iscsi |
||||
|
||||
be2iscsi exports two ifaces per host port for ipv4 and ipv6 network |
||||
configurations. But, they need to have the same link level configuration |
||||
including vlan settings. If vlan setting are modified in only one iface |
||||
record, then whichever record is applied last (filesystem dependant I |
||||
think) will take effect and things may not work. |
||||
|
||||
This change to iscsiadm applies vlan updates to all records with |
||||
matching MAC addresses if a flag is set on the transport. |
||||
The new transport flag is only set for be2iscsi. |
||||
--- |
||||
usr/iscsiadm.c | 132 ++++++++++++++++++++++++++++++++++++++++++++------------ |
||||
usr/transport.c | 1 + |
||||
usr/transport.h | 3 ++ |
||||
3 files changed, 108 insertions(+), 28 deletions(-) |
||||
|
||||
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c |
||||
index 6245e89d46cb..9083132942e2 100644 |
||||
--- a/usr/iscsiadm.c |
||||
+++ b/usr/iscsiadm.c |
||||
@@ -2311,6 +2311,89 @@ static int verify_iface_params(struct list_head *params, struct node_rec *rec) |
||||
return 0; |
||||
} |
||||
|
||||
+static int iface_param_update(struct iface_rec *iface, struct list_head *params) |
||||
+{ |
||||
+ struct node_rec *rec; |
||||
+ int rc = 0; |
||||
+ |
||||
+ rec = idbm_create_rec(NULL, -1, NULL, -1, iface, 1); |
||||
+ if (!rec) { |
||||
+ rc = ISCSI_ERR_INVAL; |
||||
+ goto update_fail; |
||||
+ } |
||||
+ |
||||
+ if (iscsi_check_for_running_session(rec)) |
||||
+ log_warning("Updating iface while iscsi sessions " |
||||
+ "are using it. You must logout the running " |
||||
+ "sessions then log back in for the " |
||||
+ "new settings to take affect."); |
||||
+ |
||||
+ rc = verify_iface_params(params, rec); |
||||
+ if (rc) |
||||
+ goto update_fail; |
||||
+ |
||||
+ rc = iface_conf_update(params, &rec->iface); |
||||
+ if (rc) |
||||
+ goto update_fail; |
||||
+ |
||||
+ rc = __for_each_matched_rec(0, rec, params, idbm_node_set_param); |
||||
+ if (rc == ISCSI_ERR_NO_OBJS_FOUND) |
||||
+ rc = 0; |
||||
+ else if (rc) |
||||
+ goto update_fail; |
||||
+ |
||||
+ printf("%s updated.\n", iface->name); |
||||
+ free(rec); |
||||
+ return rc; |
||||
+ |
||||
+update_fail: |
||||
+ log_error("Could not update iface %s: %s", |
||||
+ iface->name, iscsi_err_to_str(rc)); |
||||
+ free(rec); |
||||
+ return rc; |
||||
+} |
||||
+ |
||||
+struct iface_param_sync { |
||||
+ struct iface_rec *primary; |
||||
+ struct list_head *params; |
||||
+ int count; |
||||
+}; |
||||
+ |
||||
+static int update_sync_params(void *data, struct iface_rec *iface) |
||||
+{ |
||||
+ struct iface_param_sync *iface_params = data; |
||||
+ struct iface_rec *primary = iface_params->primary; |
||||
+ struct list_head *params = iface_params->params; |
||||
+ |
||||
+ if ((strcmp(primary->transport_name, iface->transport_name)) || |
||||
+ (strcmp(primary->hwaddress, iface->hwaddress)) || |
||||
+ (primary->iface_num != iface->iface_num)) |
||||
+ return 0; |
||||
+ |
||||
+ return iface_param_update(iface, params); |
||||
+} |
||||
+ |
||||
+static int split_vlan_params(struct list_head *params, struct list_head *vlan_params) |
||||
+{ |
||||
+ struct user_param *param, *tmp; |
||||
+ |
||||
+ list_for_each_entry_safe(param, tmp, params, list) { |
||||
+ if (!strncmp(param->name, "iface.vlan", 10)) { |
||||
+ list_move_tail(¶m->list, vlan_params); |
||||
+ } |
||||
+ } |
||||
+ return 0; |
||||
+} |
||||
+ |
||||
+static inline void list_splice_tail(struct list_head *list, struct list_head *head) |
||||
+{ |
||||
+ list->prev->next = head; |
||||
+ list->next->prev = head->prev; |
||||
+ head->prev->next = list->next; |
||||
+ head->prev = list->prev; |
||||
+ INIT_LIST_HEAD(list); |
||||
+} |
||||
+ |
||||
/* TODO: merge iter helpers and clean them up, so we can use them here */ |
||||
static int exec_iface_op(int op, int do_show, int info_level, |
||||
struct iface_rec *iface, uint64_t host_no, |
||||
@@ -2320,6 +2403,8 @@ static int exec_iface_op(int op, int do_show, int info_level, |
||||
struct node_rec *rec = NULL; |
||||
int rc = 0; |
||||
|
||||
+ LIST_HEAD(vlan_params); |
||||
+ struct iscsi_transport *t; |
||||
switch (op) { |
||||
case OP_NEW: |
||||
if (!iface) { |
||||
@@ -2381,36 +2466,27 @@ delete_fail: |
||||
rec = idbm_create_rec(NULL, -1, NULL, -1, iface, 1); |
||||
if (!rec) { |
||||
rc = ISCSI_ERR_INVAL; |
||||
- goto update_fail; |
||||
+ break; |
||||
} |
||||
- |
||||
- if (iscsi_check_for_running_session(rec)) |
||||
- log_warning("Updating iface while iscsi sessions " |
||||
- "are using it. You must logout the running " |
||||
- "sessions then log back in for the " |
||||
- "new settings to take affect."); |
||||
- |
||||
- rc = verify_iface_params(params, rec); |
||||
- if (rc) |
||||
+ t = iscsi_sysfs_get_transport_by_name(rec->iface.transport_name); |
||||
+ if (!t) { |
||||
+ log_error("Cound not locate transport for iface %s", iface->name); |
||||
+ rc = ISCSI_ERR_INVAL; |
||||
break; |
||||
- |
||||
- /* pass rec's iface because it has the db values */ |
||||
- rc = iface_conf_update(params, &rec->iface); |
||||
- if (rc) |
||||
- goto update_fail; |
||||
- |
||||
- rc = __for_each_matched_rec(0, rec, params, |
||||
- idbm_node_set_param); |
||||
- if (rc == ISCSI_ERR_NO_OBJS_FOUND) |
||||
- rc = 0; |
||||
- else if (rc) |
||||
- goto update_fail; |
||||
- |
||||
- printf("%s updated.\n", iface->name); |
||||
- break; |
||||
-update_fail: |
||||
- log_error("Could not update iface %s: %s", |
||||
- iface->name, iscsi_err_to_str(rc)); |
||||
+ } |
||||
+ if (t->template->sync_vlan_settings) { |
||||
+ /* sync shared vlan settings across ifaces */ |
||||
+ int nr_found = 0; |
||||
+ struct iface_param_sync sync_params = { |
||||
+ .primary = &rec->iface, |
||||
+ .params = &vlan_params, |
||||
+ .count = 0, |
||||
+ }; |
||||
+ split_vlan_params(params, &vlan_params); |
||||
+ iface_for_each_iface(&sync_params, 1, &nr_found, update_sync_params); |
||||
+ } |
||||
+ iface_param_update(&rec->iface, params); |
||||
+ list_splice_tail(&vlan_params, params); |
||||
break; |
||||
case OP_APPLY: |
||||
if (!iface) { |
||||
diff --git a/usr/transport.c b/usr/transport.c |
||||
index 3b7a00a2245e..35a8ccd4a400 100644 |
||||
--- a/usr/transport.c |
||||
+++ b/usr/transport.c |
||||
@@ -91,6 +91,7 @@ struct iscsi_transport_template bnx2i = { |
||||
struct iscsi_transport_template be2iscsi = { |
||||
.name = "be2iscsi", |
||||
.bind_ep_required = 1, |
||||
+ .sync_vlan_settings = 1, |
||||
.create_conn = be2iscsi_create_conn, |
||||
.ep_connect = ktransport_ep_connect, |
||||
.ep_poll = ktransport_ep_poll, |
||||
diff --git a/usr/transport.h b/usr/transport.h |
||||
index b67776b47288..07027564e46b 100644 |
||||
--- a/usr/transport.h |
||||
+++ b/usr/transport.h |
||||
@@ -40,6 +40,9 @@ struct iscsi_transport_template { |
||||
uint8_t use_boot_info; |
||||
uint8_t bind_ep_required; |
||||
uint8_t no_netdev; |
||||
+ /* be2iscsi has a single host vlan setting, |
||||
+ * but uses 2 ifaces for ipv4 and ipv6 settings; keep them in sync */ |
||||
+ uint8_t sync_vlan_settings; |
||||
int (*ep_connect) (struct iscsi_conn *conn, int non_blocking); |
||||
int (*ep_poll) (struct iscsi_conn *conn, int timeout_ms); |
||||
void (*ep_disconnect) (struct iscsi_conn *conn); |
||||
-- |
||||
2.14.4 |
||||
|
@ -0,0 +1,248 @@
@@ -0,0 +1,248 @@
|
||||
From d469a2e15e8558cf8ba34db376b4b777177a016b Mon Sep 17 00:00:00 2001 |
||||
From: Chris Leech <cleech@redhat.com> |
||||
Date: Fri, 22 Jun 2018 12:30:09 -0700 |
||||
Subject: [PATCH 1/1] iscsiuio: Add inter-host mutex while doing xmit |
||||
|
||||
Bugzilla: ZZZ |
||||
Upstream Status: |
||||
Build Info: XXX |
||||
Tested: |
||||
|
||||
commit 9501dcaf5be474b4cb882a5e00f875f8c57e0e8e |
||||
Author: Manish Rangankar <manish.rangankar@cavium.com> |
||||
Date: Wed Jun 20 02:33:36 2018 -0400 |
||||
|
||||
iscsiuio: Add inter-host mutex while doing xmit |
||||
|
||||
This avoids the netlink buffer corruption when more than one host |
||||
try to xmit packet at the same time. |
||||
|
||||
Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com> |
||||
--- |
||||
iscsiuio/src/unix/libs/cnic.c | 2 ++ |
||||
iscsiuio/src/unix/libs/qedi.c | 38 +++++++++++++++++++++++++++++++++----- |
||||
iscsiuio/src/unix/nic.c | 15 ++++++++++++--- |
||||
iscsiuio/src/unix/nic_utils.c | 4 ++++ |
||||
4 files changed, 51 insertions(+), 8 deletions(-) |
||||
|
||||
diff --git a/iscsiuio/src/unix/libs/cnic.c b/iscsiuio/src/unix/libs/cnic.c |
||||
index 32166edf243f..b953278e5eab 100644 |
||||
--- a/iscsiuio/src/unix/libs/cnic.c |
||||
+++ b/iscsiuio/src/unix/libs/cnic.c |
||||
@@ -106,6 +106,8 @@ static int cnic_arp_send(nic_t *nic, nic_interface_t *nic_iface, int fd, |
||||
static const uint8_t multicast_mac[] = { |
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - try getting xmit mutex cnic arp send", |
||||
+ nic->log_name, nic->host_no); |
||||
rc = pthread_mutex_trylock(&nic->xmit_mutex); |
||||
if (rc != 0) { |
||||
LOG_DEBUG(PFX "%s: could not get xmit_mutex", nic->log_name); |
||||
diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c |
||||
index 5bb0682c8bed..32cab48fed17 100644 |
||||
--- a/iscsiuio/src/unix/libs/qedi.c |
||||
+++ b/iscsiuio/src/unix/libs/qedi.c |
||||
@@ -74,6 +74,8 @@ |
||||
|
||||
extern int nl_sock; |
||||
|
||||
+static pthread_mutex_t host_mutex = PTHREAD_MUTEX_INITIALIZER; |
||||
+ |
||||
/* Foward struct declarations */ |
||||
struct nic_ops qedi_op; |
||||
|
||||
@@ -812,15 +814,26 @@ static void qedi_prepare_xmit_packet(nic_t *nic, |
||||
struct uip_vlan_eth_hdr *eth_vlan = (struct uip_vlan_eth_hdr *)pkt->buf; |
||||
struct uip_eth_hdr *eth = (struct uip_eth_hdr *)bp->tx_pkt; |
||||
|
||||
+ LOG_DEBUG(PFX "%s: pkt->buf_size=%d tpid=0x%x", nic->log_name, |
||||
+ pkt->buf_size, eth_vlan->tpid); |
||||
+ |
||||
if (eth_vlan->tpid == htons(UIP_ETHTYPE_8021Q)) { |
||||
memcpy(bp->tx_pkt, pkt->buf, sizeof(struct uip_eth_hdr)); |
||||
eth->type = eth_vlan->type; |
||||
pkt->buf_size -= (sizeof(struct uip_vlan_eth_hdr) - |
||||
sizeof(struct uip_eth_hdr)); |
||||
+ |
||||
+ LOG_DEBUG(PFX "%s: pkt->buf_size=%d type=0x%x", nic->log_name, |
||||
+ pkt->buf_size, eth->type); |
||||
+ LOG_DEBUG(PFX "%s: pkt->buf_size - eth_hdr_size = %d", nic->log_name, |
||||
+ pkt->buf_size - sizeof(struct uip_eth_hdr)); |
||||
+ |
||||
memcpy(bp->tx_pkt + sizeof(struct uip_eth_hdr), |
||||
pkt->buf + sizeof(struct uip_vlan_eth_hdr), |
||||
pkt->buf_size - sizeof(struct uip_eth_hdr)); |
||||
} else { |
||||
+ LOG_DEBUG(PFX "%s: NO VLAN pkt->buf_size=%d", nic->log_name, |
||||
+ pkt->buf_size); |
||||
memcpy(bp->tx_pkt, pkt->buf, pkt->buf_size); |
||||
} |
||||
|
||||
@@ -876,11 +889,18 @@ void qedi_start_xmit(nic_t *nic, size_t len, u16_t vlan_id) |
||||
path_data->handle = QEDI_PATH_HANDLE; |
||||
path_data->vlan_id = vlan_id; |
||||
uctrl->host_tx_pkt_len = len; |
||||
+ LOG_DEBUG(PFX "%s: host_no:%d vlan_id=%d, tx_pkt_len=%d", |
||||
+ nic->log_name, ev->u.set_path.host_no, path_data->vlan_id, uctrl->host_tx_pkt_len); |
||||
|
||||
+ LOG_DEBUG(PFX "%s: ACQUIRE HOST MUTEX", nic->log_name); |
||||
+ pthread_mutex_lock(&host_mutex); |
||||
rc = __kipc_call(nl_sock, ev, buflen); |
||||
if (rc > 0) { |
||||
bp->tx_prod++; |
||||
uctrl->host_tx_prod++; |
||||
+ LOG_DEBUG(PFX "%s: bp->tx_prod: %d, uctrl->host_tx_prod=%d", |
||||
+ nic->log_name, bp->tx_prod, uctrl->host_tx_prod); |
||||
+ |
||||
msync(uctrl, sizeof(struct qedi_uio_ctrl), MS_SYNC); |
||||
LOG_PACKET(PFX "%s: sent %d bytes using bp->tx_prod: %d", |
||||
nic->log_name, len, bp->tx_prod); |
||||
@@ -888,6 +908,8 @@ void qedi_start_xmit(nic_t *nic, size_t len, u16_t vlan_id) |
||||
LOG_ERR(PFX "Pkt transmission failed: %d", rc); |
||||
} |
||||
|
||||
+ LOG_DEBUG(PFX "%s: RELEASE HOST MUTEX", nic->log_name); |
||||
+ pthread_mutex_unlock(&host_mutex); |
||||
free(ubuf); |
||||
} |
||||
|
||||
@@ -923,14 +945,18 @@ int qedi_write(nic_t *nic, nic_interface_t *nic_iface, packet_t *pkt) |
||||
struct timespec sleep_req = {.tv_sec = 0, .tv_nsec = 5000000 }, |
||||
sleep_rem; |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - calling clear_tx_intr from qedi_write", |
||||
+ nic->log_name, nic->host_no); |
||||
if (qedi_clear_tx_intr(nic) == 0) |
||||
break; |
||||
|
||||
nanosleep(&sleep_req, &sleep_rem); |
||||
} |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - try getting xmit mutex", |
||||
+ nic->log_name, nic->host_no); |
||||
if (pthread_mutex_trylock(&nic->xmit_mutex) != 0) { |
||||
- LOG_PACKET(PFX "%s: Dropped previous transmitted packet", |
||||
+ LOG_DEBUG(PFX "%s: Dropped previous transmitted packet", |
||||
nic->log_name); |
||||
return -EINVAL; |
||||
} |
||||
@@ -944,7 +970,7 @@ int qedi_write(nic_t *nic, nic_interface_t *nic_iface, packet_t *pkt) |
||||
nic->stats.tx.packets++; |
||||
nic->stats.tx.bytes += uip->uip_len; |
||||
|
||||
- LOG_PACKET(PFX "%s: transmitted %d bytes dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bd_prod:%d", |
||||
+ LOG_DEBUG(PFX "%s: transmitted %d bytes dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bd_prod:%d", |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
@@ -1071,7 +1097,7 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
return -EINVAL; |
||||
} |
||||
|
||||
- LOG_PACKET(PFX "%s: clearing tx interrupt [%d %d]", |
||||
+ LOG_DEBUG(PFX "%s: clearing tx interrupt [%d %d]", |
||||
nic->log_name, bp->tx_cons, hw_cons); |
||||
bp->tx_cons = hw_cons; |
||||
|
||||
@@ -1083,7 +1109,7 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
packet_t *pkt; |
||||
int i; |
||||
|
||||
- LOG_PACKET(PFX "%s: sending queued tx packet", nic->log_name); |
||||
+ LOG_DEBUG(PFX "%s: sending queued tx packet", nic->log_name); |
||||
pkt = nic_dequeue_tx_packet(nic); |
||||
|
||||
/* Got a TX packet buffer of the TX queue and put it onto |
||||
@@ -1096,7 +1122,7 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
(pkt->nic_iface->vlan_priority << 12) | |
||||
pkt->nic_iface->vlan_id); |
||||
|
||||
- LOG_PACKET(PFX "%s: transmitted queued packet %d bytes, dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bd_prod:%d", |
||||
+ LOG_DEBUG(PFX "%s: transmitted queued packet %d bytes, dev->tx_cons: %d, dev->tx_prod: %d, dev->tx_bd_prod:%d", |
||||
nic->log_name, pkt->buf_size, |
||||
bp->tx_cons, bp->tx_prod, bp->tx_bd_prod); |
||||
|
||||
@@ -1124,6 +1150,8 @@ static int qedi_clear_tx_intr(nic_t *nic) |
||||
} |
||||
} |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - releasing xmit mutex", |
||||
+ nic->log_name, nic->host_no); |
||||
pthread_mutex_unlock(&nic->xmit_mutex); |
||||
|
||||
return 0; |
||||
diff --git a/iscsiuio/src/unix/nic.c b/iscsiuio/src/unix/nic.c |
||||
index a5f714a91923..dfc2ad0a7a7b 100644 |
||||
--- a/iscsiuio/src/unix/nic.c |
||||
+++ b/iscsiuio/src/unix/nic.c |
||||
@@ -799,6 +799,8 @@ int nic_process_intr(nic_t *nic, int discard_check) |
||||
|
||||
nic->intr_count = count; |
||||
|
||||
+ LOG_DEBUG(PFX "%s: host:%d - calling clear_tx_intr from process_intr", |
||||
+ nic->log_name, nic->host_no); |
||||
(*nic->ops->clear_tx_intr) (nic); |
||||
ret = 1; |
||||
} |
||||
@@ -1036,9 +1038,11 @@ int process_packets(nic_t *nic, |
||||
case UIP_ETHTYPE_IPv4: |
||||
case UIP_ETHTYPE_ARP: |
||||
af_type = AF_INET; |
||||
+ LOG_DEBUG(PFX "%s: ARP or IPv4 vlan:0x%x ethertype:0x%x", |
||||
+ nic->log_name, vlan_id, type); |
||||
break; |
||||
default: |
||||
- LOG_PACKET(PFX "%s: Ignoring vlan:0x%x ethertype:0x%x", |
||||
+ LOG_DEBUG(PFX "%s: Ignoring vlan:0x%x ethertype:0x%x", |
||||
nic->log_name, vlan_id, type); |
||||
goto done; |
||||
} |
||||
@@ -1064,7 +1068,7 @@ int process_packets(nic_t *nic, |
||||
if (nic_iface == NULL) { |
||||
/* Matching nic_iface not found */ |
||||
pthread_mutex_unlock(&nic->nic_mutex); |
||||
- LOG_PACKET(PFX "%s: Couldn't find interface for " |
||||
+ LOG_DEBUG(PFX "%s: Couldn't find interface for " |
||||
"VLAN: %d af_type %d", |
||||
nic->log_name, vlan_id, af_type); |
||||
rc = EINVAL; /* Return the +error code */ |
||||
@@ -1118,6 +1122,8 @@ nic_iface_present: |
||||
prepare_ipv4_packet(nic, nic_iface, |
||||
ustack, pkt); |
||||
|
||||
+ LOG_DEBUG(PFX "%s: write called after arp_ipin, uip_len=%d", |
||||
+ nic->log_name, ustack->uip_len); |
||||
(*nic->ops->write) (nic, nic_iface, pkt); |
||||
} |
||||
|
||||
@@ -1129,8 +1135,11 @@ nic_iface_present: |
||||
* in data that should be sent out on the |
||||
* network, the global variable uip_len |
||||
* is set to a value > 0. */ |
||||
- if (pkt->buf_size > 0) |
||||
+ if (pkt->buf_size > 0) { |
||||
+ LOG_DEBUG(PFX "%s: write called after arp_arpin, bufsize=%d", |
||||
+ nic->log_name, pkt->buf_size); |
||||
(*nic->ops->write) (nic, nic_iface, pkt); |
||||
+ } |
||||
break; |
||||
} |
||||
ustack->uip_len = 0; |
||||
diff --git a/iscsiuio/src/unix/nic_utils.c b/iscsiuio/src/unix/nic_utils.c |
||||
index 6e580f862eea..988905bca2a9 100644 |
||||
--- a/iscsiuio/src/unix/nic_utils.c |
||||
+++ b/iscsiuio/src/unix/nic_utils.c |
||||
@@ -1435,6 +1435,10 @@ nic_interface_t *nic_find_nic_iface(nic_t *nic, |
||||
nic_interface_t *current_vlan = NULL; |
||||
|
||||
while (current != NULL) { |
||||
+ LOG_DEBUG(PFX "%s: incoming protocol: %d, vlan_id:%d iface_num: %d, request_type: %d", |
||||
+ nic->log_name, protocol, vlan_id, iface_num, request_type); |
||||
+ LOG_DEBUG(PFX "%s: host:%d iface_num: 0x%x VLAN: %d protocol: %d", |
||||
+ nic->log_name, nic->host_no, current->iface_num, current->vlan_id, current->protocol); |
||||
if (current->protocol != protocol) |
||||
goto next; |
||||
|
||||
-- |
||||
2.14.4 |
||||
|
Loading…
Reference in new issue