Re: [PATCH v6 4/4] mm: vmalloc: convert vread() to vread_iter()

From: David Hildenbrand
Date: Wed Mar 22 2023 - 13:04:40 EST


On 22.03.23 15:55, Lorenzo Stoakes wrote:
Having previously laid the foundation for converting vread() to an iterator
function, pull the trigger and do so.

This patch attempts to provide minimal refactoring and to reflect the
existing logic as best we can, for example we continue to zero portions of
memory not read, as before.

Overall, there should be no functional difference other than a performance
improvement in /proc/kcore access to vmalloc regions.

Now we have eliminated the need for a bounce buffer in read_kcore_iter(),
we dispense with it, and try to write to user memory optimistically but
with faults disabled via copy_page_to_iter_nofault(). We already have
preemption disabled by holding a spin lock.

If this fails, we fault in and retry a single time. This is a conservative
approach intended to avoid spinning on vread_iter() if we repeatedly
encouter issues reading from it.

I have to ask again: Can you comment why that is ok? You might end up signaling -EFAULT to user space simply because swapping/page migration/whatever triggered at the wrong time.

That could break existing user space or which important part am I missing?

--
Thanks,

David / dhildenb