From 7cc41f13595cac2f6cb301e1321275da9c04dd60 Mon Sep 17 00:00:00 2001 From: J Reece Wilson Date: Mon, 5 Aug 2024 05:19:58 +0100 Subject: [PATCH] [*] Fix: axboe is a piss baby retard who cant even write a thread safe ring buffer This is the dude tasked with managing Linshits IO stack, including the fundamentally flawed muh zero-syscall pissring (#a), the fucked io_submit apis that never worked properly (incl io_cancel that spuriously returns EINVAL despite all magics matching); the retard who stuck to Linus's idea that MUH O_DIRECT IS LE EVIL YOU MUST USE MY CACHES REEE REEE (#b); and the retard who got indirectly called out by Linus as being apart of the database maintainers who Linus didn't/doesnt like and who wanted these APIs in the first place (#c). #a This dumb cunt can't even write a ring buffer. He thinks the solution to everything is spawn a thread, like the glibc and libuv retards. He seems to think a ring buffer also magically hooks into a thread scheduler, and something something, orange lingo, muh zero syscall overhead as if the kernel should be/is constantly checking every thread for an arbitrary amount of IO ring buffers. #b "The whole notion of "direct IO" is totally braindamaged. Just say no. This is your brain: O This is your brain on O_DIRECT: . Any questions? I should have fought back harder. There really is no valid reason for EVER using O_DIRECT. You need a buffer whatever IO you do, and it might as well be the page cache. There are better ways to control the page cache than play games and think that a page cache isn't necessary. So don't use O_DIRECT." - Commie Torbals, maintainer of toy academic kernels #c "AIO is a horrible ad-hoc design, with the main excuse being "other, less gifted people, made that design, and we are implementing it for compatibility because database people - who seldom have any shred of taste - actually use it". But AIO was always really really ugly." - Commie Torbals, maintainer of toy academic kernels "Jens works for Oracle" - https://web.archive.org/web/20130402030321/https://events.linuxfoundation.org/jls06b And that's not to mention Google and NodeJS has disabled the usage of his pissring implementation because of shit like this. His shit code has been and will continue to be a security risk. I can't blame them. This retard mustn't be trusted with so much as an 8 year olds lemonade stand. --- Source/AuProcAddresses.Linux.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/AuProcAddresses.Linux.cpp b/Source/AuProcAddresses.Linux.cpp index 86b98ef7..d79bfc62 100644 --- a/Source/AuProcAddresses.Linux.cpp +++ b/Source/AuProcAddresses.Linux.cpp @@ -19,8 +19,6 @@ namespace Aurora { - #define read_barrier() __asm__ __volatile__("lfence" ::: "memory") - static const auto kAioRingMagic = 0xa10a10a1u; void InitLinuxAddresses() @@ -227,15 +225,21 @@ namespace Aurora while (i < max_nr) { - auto head = pRing->head; + auto head = AuAtomicLoad(&pRing->head); if (head == pRing->tail) { break; } events[i++] = pRing->events[head]; - read_barrier(); - pRing->head = (head + 1) % pRing->nr; + + auto nextHead = (head + 1) % pRing->nr; + if (AuAtomicCompareExchange(&pRing->head, + nextHead, + head) != head) + { + i--; + } } if (!i &&