Commit 2dbf4010 authored by Vlastimil Babka's avatar Vlastimil Babka Committed by Andrew Morton

mm/mmap/vma_merge: convert mergeability checks to return bool

The comments already mention returning 'true' so make the code match them.

Link: https://lkml.kernel.org/r/20230309111258.24079-9-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Cc: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 1e76454f
...@@ -744,10 +744,10 @@ int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma, ...@@ -744,10 +744,10 @@ int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma,
* If the vma has a ->close operation then the driver probably needs to release * If the vma has a ->close operation then the driver probably needs to release
* per-vma resources, so we don't attempt to merge those. * per-vma resources, so we don't attempt to merge those.
*/ */
static inline int is_mergeable_vma(struct vm_area_struct *vma, static inline bool is_mergeable_vma(struct vm_area_struct *vma,
struct file *file, unsigned long vm_flags, struct file *file, unsigned long vm_flags,
struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
struct anon_vma_name *anon_name) struct anon_vma_name *anon_name)
{ {
/* /*
* VM_SOFTDIRTY should not prevent from VMA merging, if we * VM_SOFTDIRTY should not prevent from VMA merging, if we
...@@ -758,21 +758,20 @@ static inline int is_mergeable_vma(struct vm_area_struct *vma, ...@@ -758,21 +758,20 @@ static inline int is_mergeable_vma(struct vm_area_struct *vma,
* extended instead. * extended instead.
*/ */
if ((vma->vm_flags ^ vm_flags) & ~VM_SOFTDIRTY) if ((vma->vm_flags ^ vm_flags) & ~VM_SOFTDIRTY)
return 0; return false;
if (vma->vm_file != file) if (vma->vm_file != file)
return 0; return false;
if (vma->vm_ops && vma->vm_ops->close) if (vma->vm_ops && vma->vm_ops->close)
return 0; return false;
if (!is_mergeable_vm_userfaultfd_ctx(vma, vm_userfaultfd_ctx)) if (!is_mergeable_vm_userfaultfd_ctx(vma, vm_userfaultfd_ctx))
return 0; return false;
if (!anon_vma_name_eq(anon_vma_name(vma), anon_name)) if (!anon_vma_name_eq(anon_vma_name(vma), anon_name))
return 0; return false;
return 1; return true;
} }
static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1, static inline bool is_mergeable_anon_vma(struct anon_vma *anon_vma1,
struct anon_vma *anon_vma2, struct anon_vma *anon_vma2, struct vm_area_struct *vma)
struct vm_area_struct *vma)
{ {
/* /*
* The list_is_singular() test is to avoid merging VMA cloned from * The list_is_singular() test is to avoid merging VMA cloned from
...@@ -780,7 +779,7 @@ static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1, ...@@ -780,7 +779,7 @@ static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1,
*/ */
if ((!anon_vma1 || !anon_vma2) && (!vma || if ((!anon_vma1 || !anon_vma2) && (!vma ||
list_is_singular(&vma->anon_vma_chain))) list_is_singular(&vma->anon_vma_chain)))
return 1; return true;
return anon_vma1 == anon_vma2; return anon_vma1 == anon_vma2;
} }
...@@ -795,19 +794,18 @@ static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1, ...@@ -795,19 +794,18 @@ static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1,
* indices (16TB on ia32) because do_mmap() does not permit mmap's which * indices (16TB on ia32) because do_mmap() does not permit mmap's which
* wrap, nor mmaps which cover the final page at index -1UL. * wrap, nor mmaps which cover the final page at index -1UL.
*/ */
static int static bool
can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
struct anon_vma *anon_vma, struct file *file, struct anon_vma *anon_vma, struct file *file,
pgoff_t vm_pgoff, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name)
struct anon_vma_name *anon_name)
{ {
if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) && if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
if (vma->vm_pgoff == vm_pgoff) if (vma->vm_pgoff == vm_pgoff)
return 1; return true;
} }
return 0; return false;
} }
/* /*
...@@ -817,21 +815,20 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, ...@@ -817,21 +815,20 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
* We cannot merge two vmas if they have differently assigned (non-NULL) * We cannot merge two vmas if they have differently assigned (non-NULL)
* anon_vmas, nor if same anon_vma is assigned but offsets incompatible. * anon_vmas, nor if same anon_vma is assigned but offsets incompatible.
*/ */
static int static bool
can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
struct anon_vma *anon_vma, struct file *file, struct anon_vma *anon_vma, struct file *file,
pgoff_t vm_pgoff, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
struct vm_userfaultfd_ctx vm_userfaultfd_ctx, struct anon_vma_name *anon_name)
struct anon_vma_name *anon_name)
{ {
if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) && if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
pgoff_t vm_pglen; pgoff_t vm_pglen;
vm_pglen = vma_pages(vma); vm_pglen = vma_pages(vma);
if (vma->vm_pgoff + vm_pglen == vm_pgoff) if (vma->vm_pgoff + vm_pglen == vm_pgoff)
return 1; return true;
} }
return 0; return false;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment