From: Michael Jeanson Date: Tue, 7 Mar 2023 16:41:14 +0000 (-0500) Subject: fix: mm: introduce vma->vm_flags wrapper functions (v6.3) X-Git-Url: http://git.liburcu.org/?p=lttng-modules.git;a=commitdiff_plain;h=23d91ab1f33370551feceddd93a1ecac7213e692 fix: mm: introduce vma->vm_flags wrapper functions (v6.3) See upstream commit : commit bc292ab00f6c7a661a8a605c714e8a148f629ef6 Author: Suren Baghdasaryan Date: Thu Jan 26 11:37:47 2023 -0800 mm: introduce vma->vm_flags wrapper functions vm_flags are among VMA attributes which affect decisions like VMA merging and splitting. Therefore all vm_flags modifications are performed after taking exclusive mmap_lock to prevent vm_flags updates racing with such operations. Introduce modifier functions for vm_flags to be used whenever flags are updated. This way we can better check and control correct locking behavior during these updates. Change-Id: I2cf662420d9d7748e5e310d3ea4bac98ba7d7f94 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- diff --git a/include/wrapper/mm.h b/include/wrapper/mm.h index f7e8e87e..047d9368 100644 --- a/include/wrapper/mm.h +++ b/include/wrapper/mm.h @@ -13,6 +13,22 @@ #include +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,3,0)) +static inline +void wrapper_vm_flags_set(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vm_flags_set(vma, flags); +} +#else +static inline +void wrapper_vm_flags_set(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma->vm_flags |= flags; +} +#endif + #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0) \ || LTTNG_UBUNTU_KERNEL_RANGE(4,4,25,44, 4,5,0,0)) diff --git a/src/lib/ringbuffer/ring_buffer_mmap.c b/src/lib/ringbuffer/ring_buffer_mmap.c index 25e2d8d5..d24b76a3 100644 --- a/src/lib/ringbuffer/ring_buffer_mmap.c +++ b/src/lib/ringbuffer/ring_buffer_mmap.c @@ -17,6 +17,8 @@ #include #include +#include + /* * fault() vm_op implementation for ring buffer file mapping. */ @@ -113,7 +115,7 @@ static int lib_ring_buffer_mmap_buf(struct lttng_kernel_ring_buffer *buf, return -EINVAL; vma->vm_ops = &lib_ring_buffer_mmap_ops; - vma->vm_flags |= VM_DONTEXPAND; + wrapper_vm_flags_set(vma, VM_DONTEXPAND); vma->vm_private_data = buf; return 0;