Skip to contentSkip to conversation

s390: network patches for net-next

PATCH In review [email protected] 2 participants 6 messages Mar 19, 2014 – Mar 20, 2014

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

cover s390: network patches for net-next

Hi Dave,

here are some s390 related patches for net-next

shortlog:

Ursula Braun (1)
af_iucv: recvmsg problem for SOCK_STREAM sockets

Heiko Carstens (1)
qeth: make qeth_query_card_info_cb() static

Stefan Raspl (2)
qeth: Removed unused parameter
qeth: Fix IP version detection for VLAN traffic

Thanks,
Frank

#1 lore raw

PATCH 1/4 af_iucv: recvmsg problem for SOCK_STREAM sockets

From: Ursula Braun <[email protected]>

Commit f9c41a62bba3f3f7ef3541b2a025e3371bcbba97 introduced a problem for SOCK_STREAM sockets, when only part of the incoming iucv message is received by user space. In this case the remaining data of the iucv message is lost. This patch makes sure an incompletely received iucv message is queued back to the receive queue.

---
 net/iucv/af_iucv.c | 1 +
 1 file changed, 1 insertion(+)
net/iucv/af_iucv.c +1 -0
index c4b7218..a5e0311 100644
@@ -1382,6 +1382,7 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
 		if (sk->sk_type == SOCK_STREAM) {
 			if (copied < rlen) {
 				IUCV_SKB_CB(skb)->offset = offset + copied;
+				skb_queue_head(&sk->sk_receive_queue, skb);
 				goto done;
 			}
 		}
#2 lore raw

PATCH 2/4 qeth: make qeth_query_card_info_cb() static

In reply to [email protected]

From: Heiko Carstens <[email protected]>

---
 drivers/s390/net/qeth_core_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/net/qeth_core_main.c +2 -2
index a0aff2e..22470a3 100644
@@ -4610,8 +4610,8 @@ out:
 }
 EXPORT_SYMBOL_GPL(qeth_query_oat_command);
 
-int qeth_query_card_info_cb(struct qeth_card *card,
-			struct qeth_reply *reply, unsigned long data)
+static int qeth_query_card_info_cb(struct qeth_card *card,
+				   struct qeth_reply *reply, unsigned long data)
 {
 	struct qeth_ipa_cmd *cmd;
 	struct qeth_query_card_info *card_info;
#3 lore raw

PATCH 3/4 qeth: Removed unused parameter

In reply to [email protected]

From: Stefan Raspl <[email protected]>

---
 drivers/s390/net/qeth_l2_main.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/s390/net/qeth_l2_main.c +3 -3
index 908d825..8dea3f1 100644
@@ -241,7 +241,7 @@ static inline int qeth_l2_get_cast_type(struct qeth_card *card,
 }
 
 static void qeth_l2_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
-			struct sk_buff *skb, int ipv, int cast_type)
+			struct sk_buff *skb, int cast_type)
 {
 	struct vlan_ethhdr *veth = (struct vlan_ethhdr *)skb_mac_header(skb);
 
@@ -762,7 +762,7 @@ static int qeth_l2_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 				goto tx_drop;
 			elements_needed++;
 			skb_reset_mac_header(new_skb);
-			qeth_l2_fill_header(card, hdr, new_skb, ipv, cast_type);
+			qeth_l2_fill_header(card, hdr, new_skb, cast_type);
 			hdr->hdr.l2.pkt_length = new_skb->len;
 			memcpy(((char *)hdr) + sizeof(struct qeth_hdr),
 				skb_mac_header(new_skb), ETH_HLEN);
@@ -775,7 +775,7 @@ static int qeth_l2_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 			hdr = (struct qeth_hdr *)skb_push(new_skb,
 						sizeof(struct qeth_hdr));
 			skb_set_mac_header(new_skb, sizeof(struct qeth_hdr));
-			qeth_l2_fill_header(card, hdr, new_skb, ipv, cast_type);
+			qeth_l2_fill_header(card, hdr, new_skb, cast_type);
 		}
 	}
 
#4 lore raw

PATCH 4/4 qeth: Fix IP version detection for VLAN traffic

In reply to [email protected]

From: Stefan Raspl <[email protected]>

The current code would always return 0 for VLAN-encapsulated IP traffic. One notable side effect was that VLAN traffic would never get prioritized on OSD and OSX devices when priority queueing modes prio_queueing_tos or prio_queueing_prec were enabled.

---
 drivers/s390/net/qeth_core.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/s390/net/qeth_core.h +5 -2
index a0de045..5333b2c 100644
@@ -854,8 +854,11 @@ static inline int qeth_get_micros(void)
 
 static inline int qeth_get_ip_version(struct sk_buff *skb)
 {
-	struct ethhdr *ehdr = (struct ethhdr *)skb->data;
-	switch (ehdr->h_proto) {
+	__be16 *p = &((struct ethhdr *)skb->data)->h_proto;
+
+	if (*p == ETH_P_8021Q)
+		p += 2;
+	switch (*p) {
 	case ETH_P_IPV6:
 		return 6;
 	case ETH_P_IP: