Revision 74f464e97044da33b25aaed00213914b0edf1f2e authored by Jens Axboe on 17 April 2019, 14:57:48 UTC, committed by Jens Axboe on 17 April 2019, 17:41:49 UTC
This is a leftover from when the rings initially were not free flowing,
and hence a test for tail + 1 == head would indicate full. Since we now
let them wrap instead of mask them with the size, we need to check if
they drift more than the ring size from each other.

This fixes a case where we'd overwrite CQ ring entries, if the user
failed to reap completions. Both cases would ultimately result in lost
completions as the application violated the depth it asked for. The only
difference is that before this fix we'd return invalid entries for the
overflowed completions, instead of properly flagging it in the
cq_ring->overflow variable.

Reported-by: Stefan Bühler <source@stbuehler.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent b19062a
History
File Mode Size
Kconfig -rw-r--r-- 3.9 KB
Makefile -rw-r--r-- 870 bytes
array.c -rw-r--r-- 21.1 KB
base.c -rw-r--r-- 87.7 KB
cmdline.c -rw-r--r-- 415 bytes
consoles.c -rw-r--r-- 1.9 KB
cpuinfo.c -rw-r--r-- 698 bytes
devices.c -rw-r--r-- 1.1 KB
fd.c -rw-r--r-- 7.7 KB
fd.h -rw-r--r-- 539 bytes
generic.c -rw-r--r-- 17.4 KB
inode.c -rw-r--r-- 11.9 KB
internal.h -rw-r--r-- 8.7 KB
interrupts.c -rw-r--r-- 841 bytes
kcore.c -rw-r--r-- 15.5 KB
kmsg.c -rw-r--r-- 1.5 KB
loadavg.c -rw-r--r-- 880 bytes
meminfo.c -rw-r--r-- 5.1 KB
namespaces.c -rw-r--r-- 4.1 KB
nommu.c -rw-r--r-- 2.9 KB
page.c -rw-r--r-- 7.0 KB
proc_net.c -rw-r--r-- 9.7 KB
proc_sysctl.c -rw-r--r-- 41.0 KB
proc_tty.c -rw-r--r-- 4.5 KB
root.c -rw-r--r-- 7.6 KB
self.c -rw-r--r-- 1.7 KB
softirqs.c -rw-r--r-- 741 bytes
stat.c -rw-r--r-- 6.0 KB
task_mmu.c -rw-r--r-- 44.1 KB
task_nommu.c -rw-r--r-- 6.6 KB
thread_self.c -rw-r--r-- 1.9 KB
uptime.c -rw-r--r-- 922 bytes
util.c -rw-r--r-- 383 bytes
version.c -rw-r--r-- 515 bytes
vmcore.c -rw-r--r-- 39.9 KB

back to top