commit 64e03ff72623b8c2ea89ca3cb660094e019ed4ae upstream.
When allocating a new AOB fails, handle_outbound() is still capable of
transmitting the selected buffer (just without async completion).
But if a previous transfer on this queue slot used async completion, its
sbal_state flags field is still set to QDIO_OUTBUF_STATE_FLAG_PENDING.
So when the upper layer driver sees this stale flag, it expects an async
completion that never happens.
Fix this by unconditionally clearing the flags field.
Fixes:
|
||
---|---|---|
.. | ||
airq.c | ||
blacklist.c | ||
blacklist.h | ||
ccwgroup.c | ||
ccwreq.c | ||
chp.c | ||
chp.h | ||
chsc_sch.c | ||
chsc_sch.h | ||
chsc.c | ||
chsc.h | ||
cio_debug.h | ||
cio.c | ||
cio.h | ||
cmf.c | ||
crw.c | ||
css.c | ||
css.h | ||
device_fsm.c | ||
device_id.c | ||
device_ops.c | ||
device_pgid.c | ||
device_status.c | ||
device.c | ||
device.h | ||
eadm_sch.c | ||
eadm_sch.h | ||
fcx.c | ||
idset.c | ||
idset.h | ||
io_sch.h | ||
ioasm.h | ||
isc.c | ||
itcw.c | ||
Makefile | ||
orb.h | ||
qdio_debug.c | ||
qdio_debug.h | ||
qdio_main.c | ||
qdio_setup.c | ||
qdio_thinint.c | ||
qdio.h | ||
scm.c |