All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Jianyu Zhan <nasa4836@gmail.com>
Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, riel@redhat.com,
	mgorman@suse.de, aarcange@redhat.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] mm/swap.c: split put_compound_page function
Date: Wed, 30 Apr 2014 23:54:08 +0300	[thread overview]
Message-ID: <20140430205408.GB27455@node.dhcp.inet.fi> (raw)
In-Reply-To: <1fc028045336844fe9ba9ee27c406e6ebe4726f4.1398764420.git.nasa4836@gmail.com>

On Tue, Apr 29, 2014 at 05:42:28PM +0800, Jianyu Zhan wrote:
> Currently, put_compound_page should carefully handle tricky case
> to avoid racing with compound page releasing or spliting, which
> makes it growing quite lenthy(about 200+ lines) and need deep
> tab indention, which makes it quite hard to follow and maintain.
> 
> Now based on two helpers introduced in the previous patch
> ("mm/swap.c: introduce put_[un]refcounted_compound_page helpers
> for spliting put_compound_page"), this patch just replaces those
> two lenthy code path with these two helpers, respectively.
> Also, it has some comment rephrasing.
> 
> After this patch, the put_compound_page() will be very compact,
> thus easy to read and maintain.
> 
> After spliting, the object file is of same size as the original one.
> Actually, I've diff'ed put_compound_page()'s orginal disassemble code
> and the patched disassemble code, the are 100% the same!
> 
> This fact shows that this spliting has no functinal change,
> but it brings readability.
> 
> This patch and the previous one blow the code by 32 lines, which
> mostly credits to comments.
> 
> Signed-off-by: Jianyu Zhan <nasa4836@gmail.com>
> ---
>  mm/swap.c | 142 +++++++-------------------------------------------------------
>  1 file changed, 16 insertions(+), 126 deletions(-)
> 
> diff --git a/mm/swap.c b/mm/swap.c
> index a576449..d8654d8 100644
> --- a/mm/swap.c
> +++ b/mm/swap.c
> @@ -225,6 +225,11 @@ static void put_compound_page(struct page *page)
>  {
>  	struct page *page_head;
>  
> +	/*
> +	 * We see the PageCompound set and PageTail not set, so @page maybe:
> +	 *  1. hugetlbfs head page, or
> +	 *  2. THP head page.

3. Head of slab compound page.

> +	 */
>  	if (likely(!PageTail(page))) {
>  		if (put_page_testzero(page)) {
>  			/*
> @@ -239,135 +244,20 @@ static void put_compound_page(struct page *page)
>  		return;
>  	}
>  

...

> +	 * We see the PageCompound set and PageTail set, so @page maybe:
> +	 *  1. a tail hugetlbfs page, or
> +	 *  2. a tail THP page, or
> +	 *  3. a split THP page.

4. Tail of slab compound page

-- 
 Kirill A. Shutemov

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Jianyu Zhan <nasa4836@gmail.com>
Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, riel@redhat.com,
	mgorman@suse.de, aarcange@redhat.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] mm/swap.c: split put_compound_page function
Date: Wed, 30 Apr 2014 23:54:08 +0300	[thread overview]
Message-ID: <20140430205408.GB27455@node.dhcp.inet.fi> (raw)
In-Reply-To: <1fc028045336844fe9ba9ee27c406e6ebe4726f4.1398764420.git.nasa4836@gmail.com>

On Tue, Apr 29, 2014 at 05:42:28PM +0800, Jianyu Zhan wrote:
> Currently, put_compound_page should carefully handle tricky case
> to avoid racing with compound page releasing or spliting, which
> makes it growing quite lenthy(about 200+ lines) and need deep
> tab indention, which makes it quite hard to follow and maintain.
> 
> Now based on two helpers introduced in the previous patch
> ("mm/swap.c: introduce put_[un]refcounted_compound_page helpers
> for spliting put_compound_page"), this patch just replaces those
> two lenthy code path with these two helpers, respectively.
> Also, it has some comment rephrasing.
> 
> After this patch, the put_compound_page() will be very compact,
> thus easy to read and maintain.
> 
> After spliting, the object file is of same size as the original one.
> Actually, I've diff'ed put_compound_page()'s orginal disassemble code
> and the patched disassemble code, the are 100% the same!
> 
> This fact shows that this spliting has no functinal change,
> but it brings readability.
> 
> This patch and the previous one blow the code by 32 lines, which
> mostly credits to comments.
> 
> Signed-off-by: Jianyu Zhan <nasa4836@gmail.com>
> ---
>  mm/swap.c | 142 +++++++-------------------------------------------------------
>  1 file changed, 16 insertions(+), 126 deletions(-)
> 
> diff --git a/mm/swap.c b/mm/swap.c
> index a576449..d8654d8 100644
> --- a/mm/swap.c
> +++ b/mm/swap.c
> @@ -225,6 +225,11 @@ static void put_compound_page(struct page *page)
>  {
>  	struct page *page_head;
>  
> +	/*
> +	 * We see the PageCompound set and PageTail not set, so @page maybe:
> +	 *  1. hugetlbfs head page, or
> +	 *  2. THP head page.

3. Head of slab compound page.

> +	 */
>  	if (likely(!PageTail(page))) {
>  		if (put_page_testzero(page)) {
>  			/*
> @@ -239,135 +244,20 @@ static void put_compound_page(struct page *page)
>  		return;
>  	}
>  

...

> +	 * We see the PageCompound set and PageTail set, so @page maybe:
> +	 *  1. a tail hugetlbfs page, or
> +	 *  2. a tail THP page, or
> +	 *  3. a split THP page.

4. Tail of slab compound page

-- 
 Kirill A. Shutemov

  reply	other threads:[~2014-04-30 20:54 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-29  9:42 [PATCH 1/3] mm/swap.c: introduce put_[un]refcounted_compound_page helpers for spliting put_compound_page Jianyu Zhan
2014-04-29  9:42 ` Jianyu Zhan
2014-04-29  9:42 ` [PATCH 2/3] mm/swap.c: split put_compound_page function Jianyu Zhan
2014-04-29  9:42   ` Jianyu Zhan
2014-04-30 20:54   ` Kirill A. Shutemov [this message]
2014-04-30 20:54     ` Kirill A. Shutemov
2014-04-29  9:42 ` [PATCH 3/3] mm: introdule compound_head_by_tail() Jianyu Zhan
2014-04-29  9:42   ` Jianyu Zhan
2014-04-30 20:50 ` [PATCH 1/3] mm/swap.c: introduce put_[un]refcounted_compound_page helpers for spliting put_compound_page Kirill A. Shutemov
2014-04-30 20:50   ` Kirill A. Shutemov

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=20140430205408.GB27455@node.dhcp.inet.fi \
    --to=kirill@shutemov.name \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=nasa4836@gmail.com \
    --cc=riel@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.