Thanks, this is a significant improvement. Applying it on top of v6.1.12 allows my reproducer to pass most of the time (running as init in qemu).
Unfortunately, it's still failing around 10% of the time:
$ for x in $(seq 100); do qemu-system-x86_64 -nographic -no-reboot -append 'console=ttyS0 panic=-1' -kernel arch/x86/boot/bzImage -initrd initrd/initrd.gz; done | tee qemu.log [...] > $ egrep -o 'Failed|Success' qemu.log | sort | uniq -c 11 Failed 89 Success
The failures now happen later, around 25 MiB:
$ grep Failed qemu.log Failed. m=0xffffffffffffffff size=8192 (1<<13) i=1050 errno=12 total_leaks=29081600 (27 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=332 errno=12 total_leaks=23199744 (22 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=838 errno=12 total_leaks=27344896 (26 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=282 errno=12 total_leaks=22790144 (21 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=695 errno=12 total_leaks=26173440 (24 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=1064 errno=12 total_leaks=29196288 (27 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=608 errno=12 total_leaks=25460736 (24 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=443 errno=12 total_leaks=24109056 (22 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=549 errno=12 total_leaks=24977408 (23 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=630 errno=12 total_leaks=25640960 (24 MiB) Failed. m=0xffffffffffffffff size=8192 (1<<13) i=820 errno=12 total_leaks=27197440 (25 MiB)
Just to make sure, I went back to e15e06a8 and ran the same loop.
$ egrep -o 'Failed|Success' qemu.log | sort | uniq -c 100 Success
And with the patches applied on top of master (ee3f96b1):
$ egrep -o 'Failed|Success' qemu.log | sort | uniq -c 10 Failed 90 Success
//Snild