lkml.org 
[lkml]   [2022]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC PATCH 4/4] [PATCH 4/4] mm: add tracing for VMA merges
On 2/18/22 20:57, Liam Howlett wrote:
>> /*
>> * Can we merge both predecessor and successor?
>> */
>> - if (merge_prev && merge_next)
>> + if (merge_prev >= MERGE_OK && merge_next >= MERGE_OK) {
>
> What happened to making vma_merge easier to read? What does > MERGE_OK
> mean? I guess this answers why booleans were not used, but I don't like

It's similar to e.g. enum compact_priority where specific values are defined
as well as more abstract aliases.

> it. Couldn't you just log the err/success and the value of
> merge_prev/merge_next? It's not like the code tries more than one way
> of merging on failure..

An initial version had the "log" (trace point really) at multiple places and
it was uglier than collecting details in the variables and having a single
tracepoint call site.

Note that the tracepoint is being provided as part of the series mainly to
allow evaluation of the series. If it's deemed too specific to be included
in mainline in the end, so be it.

>> merge_both = is_mergeable_anon_vma(prev->anon_vma, next->anon_vma, NULL);
>> + }
>>
>> - if (merge_both) { /* cases 1, 6 */
>> + if (merge_both >= MERGE_OK) { /* cases 1, 6 */
>> err = __vma_adjust(prev, prev->vm_start,
>> next->vm_end, prev->vm_pgoff, NULL,
>> prev);
>> area = prev;
>> - } else if (merge_prev) { /* cases 2, 5, 7 */
>> + } else if (merge_prev >= MERGE_OK) { /* cases 2, 5, 7 */
>> err = __vma_adjust(prev, prev->vm_start,
>> end, prev->vm_pgoff, NULL, prev);
>> area = prev;
>> - } else if (merge_next) {
>> + } else if (merge_next >= MERGE_OK) {
>> if (prev && addr < prev->vm_end) /* case 4 */
>> err = __vma_adjust(prev, prev->vm_start,
>> addr, prev->vm_pgoff, NULL, next);
>> @@ -1252,7 +1255,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
>> } else {
>> err = -1;
>> }
>> -
>> + trace_vm_av_merge(err, merge_prev, merge_next, merge_both);
>> /*
>> * Cannot merge with predecessor or successor or error in __vma_adjust?
>> */
>> @@ -3359,6 +3362,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
>> /*
>> * Source vma may have been merged into new_vma
>> */
>> + trace_vm_pgoff_merge(vma, anon_pgoff_updated);
>> +
>> if (unlikely(vma_start >= new_vma->vm_start &&
>> vma_start < new_vma->vm_end)) {
>> /*
>> --
>> 2.34.1
>>

\
 
 \ /
  Last update: 2022-02-25 11:40    [W:0.108 / U:3.620 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site