Kernel Bug Tracker – Bug 15562
SCSI Generic block io queueing can lock up
Last modified: 2015-02-19 15:41:36 UTC
When queueing, write() can occassionally return ENOMEM or EBUSY. The
SCSI GENERIC HOWTO indicates ENOMEM can be returned for indirect io
and that it is extremely rare, however I can typically cause it within
an hour even for direct io which shouldn't need to mem copy. The
EBUSY return is not even a documented error in these circumstances.
Regardless of which error is received, retrying will never succeed and
the fd is wedged at this point. With EBUSY I've noticed several
concurrent processes running against different sg block devices to
fail simultaneously and never allow a write() to queue a command
This happens when there is plenty of swap, only 20% of ram "used ",
the rest occupied by buffer cache.
There are no errors logged by the driver. Here is an example of the
offending sg_io_hdr, note all values are in hex:
dxfer_direction fffffffd (SG_DXFER_FROM_DEV)
cmd_len a (it's a READ 10)
flags 1 (SG_FLAG_DIRECT_IO)
This bug is against obsolete kernel. Please test newer
kernel to see if fixed.
This bug relates to a very old kernel. Closing as obsolete.