linux-stable/drivers/s390/net
Julian Wiedmann acd9776b5c s390/qeth: no ETH header for outbound AF_IUCV
With AF_IUCV traffic, the skb passed to hard_start_xmit() has a 14 byte
slot at skb->data, intended for an ETH header. qeth_l3_fill_af_iucv_hdr()
fills this ETH header... and then immediately moves it to the
skb's headroom, where it disappears and is never seen again.

But it's still possible for us to return NETDEV_TX_BUSY after the skb has
been modified. Since we didn't get a private copy of the skb, the next
time the skb is delivered to hard_start_xmit() it no longer has the
expected layout (we moved the ETH header to the headroom, so skb->data
now starts at the IUCV_TRANS header). So when qeth_l3_fill_af_iucv_hdr()
does another round of rebuilding, the resulting qeth header ends up
all wrong. On transmission, the buffer is then rejected by
the HiperSockets device with SBALF15 = x'04'.
When this error is passed back to af_iucv as TX_NOTIFY_UNREACHABLE, it
tears down the offending socket.

As the ETH header for AF_IUCV serves no purpose, just align the code to
what we do for IP traffic on L3 HiperSockets: keep the ETH header at
skb->data, and pass down data_offset = ETH_HLEN to qeth_fill_buffer().
When mapping the payload into the SBAL elements, the ETH header is then
stripped off. This avoids the skb manipulations in
qeth_l3_fill_af_iucv_hdr(), and any buffer re-entering hard_start_xmit()
after NETDEV_TX_BUSY is now processed properly.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-03-24 12:40:00 -07:00
..
ctcm_dbug.c
ctcm_dbug.h
ctcm_fsms.c
ctcm_fsms.h
ctcm_main.c s390/net: use net core MTU range checking 2016-10-20 14:51:10 -04:00
ctcm_main.h
ctcm_mpc.c treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
ctcm_mpc.h
ctcm_sysfs.c
fsm.c
fsm.h
Kconfig s390: remove claw driver 2015-02-28 23:38:29 -05:00
lcs.c s390/lcs: remove trailing space at end of dev_err message 2016-10-13 10:59:45 -04:00
lcs.h
Makefile s390: remove claw driver 2015-02-28 23:38:29 -05:00
netiucv.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
qeth_core.h s390/qeth: size calculation outbound buffers 2017-03-24 12:39:59 -07:00
qeth_core_main.c s390/qeth: size calculation outbound buffers 2017-03-24 12:39:59 -07:00
qeth_core_mpc.c qeth: OSA version of SETBRIDGEPORT command 2015-05-18 12:14:17 -04:00
qeth_core_mpc.h s390/qeth: test RX/TX checksum offload reply 2017-01-12 10:02:43 -05:00
qeth_core_sys.c qeth: omit outbound queue 3 for unicast packets in Priority Queuing on HiperSockets 2016-06-16 22:16:13 -07:00
qeth_l2.h qeth: optimize IP handling in rx_mode callback 2016-06-16 22:16:12 -07:00
qeth_l2_main.c s390/qeth: size calculation outbound buffers 2017-03-24 12:39:59 -07:00
qeth_l2_sys.c qeth: no write permission for readonly sysattr 2015-09-21 16:03:04 -07:00
qeth_l3.h qeth: optimize IP handling in rx_mode callback 2016-06-16 22:16:12 -07:00
qeth_l3_main.c s390/qeth: no ETH header for outbound AF_IUCV 2017-03-24 12:40:00 -07:00
qeth_l3_sys.c s390/qeth: fix retrieval of vipa and proxy-arp addresses 2017-01-12 10:02:43 -05:00
smsgiucv.c s390/iucv: do not use arrays as argument 2015-09-21 16:03:04 -07:00
smsgiucv.h
smsgiucv_app.c