From: akpm@linux-foundation.org
To: akpm@linux-foundation.org, hch@infradead.org, linux-mm@kvack.org,
mgorman@techsingularity.net, mm-commits@vger.kernel.org,
osalvador@suse.de, richardw.yang@linux.intel.com,
torvalds@linux-foundation.org, vbabka@suse.cz,
willy@infradead.org
Subject: [patch 030/158] mm/mmap.c: prev could be retrieved from vma->vm_prev
Date: Sat, 30 Nov 2019 17:50:43 -0800 [thread overview]
Message-ID: <20191201015043.vxwibc4lm%akpm@linux-foundation.org> (raw)
From: Wei Yang <richardw.yang@linux.intel.com>
Subject: mm/mmap.c: prev could be retrieved from vma->vm_prev
Currently __vma_unlink_common handles two cases:
* has_prev
* or not
When has_prev is false, it is obvious prev is calculated from vma->vm_prev
in __vma_unlink_common.
When has_prev is true, the prev is passed through from __vma_unlink_prev
in __vma_adjust for non-case 8. And at the beginning next is calculated
from vma->vm_next, which implies vma is next->vm_prev.
The above statement sounds a little complicated, while to think in another
point of view, no matter whether vma and next is swapped, the mmap link
list still preserves its property. It is proper to access vma->vm_prev.
Link: http://lkml.kernel.org/r/20191006012636.31521-1-richardw.yang@linux.intel.com
Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
mm/mmap.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
--- a/mm/mmap.c~mm-mmapc-prev-could-be-retrieved-from-vma-vm_prev
+++ a/mm/mmap.c
@@ -684,23 +684,17 @@ static void __insert_vm_struct(struct mm
static __always_inline void __vma_unlink_common(struct mm_struct *mm,
struct vm_area_struct *vma,
- struct vm_area_struct *prev,
- bool has_prev,
struct vm_area_struct *ignore)
{
- struct vm_area_struct *next;
+ struct vm_area_struct *prev, *next;
vma_rb_erase_ignore(vma, &mm->mm_rb, ignore);
next = vma->vm_next;
- if (has_prev)
+ prev = vma->vm_prev;
+ if (prev)
prev->vm_next = next;
- else {
- prev = vma->vm_prev;
- if (prev)
- prev->vm_next = next;
- else
- mm->mmap = next;
- }
+ else
+ mm->mmap = next;
if (next)
next->vm_prev = prev;
@@ -712,7 +706,7 @@ static inline void __vma_unlink_prev(str
struct vm_area_struct *vma,
struct vm_area_struct *prev)
{
- __vma_unlink_common(mm, vma, prev, true, vma);
+ __vma_unlink_common(mm, vma, vma);
}
/*
@@ -898,7 +892,7 @@ again:
* "next" (which is stored in post-swap()
* "vma").
*/
- __vma_unlink_common(mm, next, NULL, false, vma);
+ __vma_unlink_common(mm, next, vma);
if (file)
__remove_shared_vm_struct(next, file, mapping);
} else if (insert) {
_
reply other threads:[~2019-12-01 1:50 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191201015043.vxwibc4lm%akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=hch@infradead.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mm-commits@vger.kernel.org \
--cc=osalvador@suse.de \
--cc=richardw.yang@linux.intel.com \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox