All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <jweiner@redhat.com>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Mel Gorman <mel@csn.ul.ie>, Rik van Riel <riel@redhat.com>,
	Lee Schermerhorn <lee.schermerhorn@hp.com>
Subject: Re: [PATCH] vmscan: add barrier to prevent evictable page in unevictable list
Date: Wed, 28 Sep 2011 10:14:52 +0200	[thread overview]
Message-ID: <20110928081452.GC23535@redhat.com> (raw)
In-Reply-To: <1317174330-2677-1-git-send-email-minchan.kim@gmail.com>

On Wed, Sep 28, 2011 at 10:45:30AM +0900, Minchan Kim wrote:
> When racing between putback_lru_page and shmem_unlock happens,
> progrom execution order is as follows, but clear_bit in processor #1
> could be reordered right before spin_unlock of processor #1.
> Then, the page would be stranded on the unevictable list.
> 
> spin_lock
> SetPageLRU
> spin_unlock
>                                 clear_bit(AS_UNEVICTABLE)
>                                 spin_lock
>                                 if PageLRU()
>                                         if !test_bit(AS_UNEVICTABLE)
>                                         	move evictable list
> smp_mb
> if !test_bit(AS_UNEVICTABLE)
>         move evictable list
>                                 spin_unlock
> 
> But, pagevec_lookup in scan_mapping_unevictable_pages has rcu_read_[un]lock so
> it could protect reordering before reaching test_bit(AS_UNEVICTABLE) on processor #1
> so this problem never happens. But it's a unexpected side effect and we should
> solve this problem properly.
> 
> This patch adds a barrier after mapping_clear_unevictable.
> 
> side-note: I didn't meet this problem but just found during review.
> 
> Cc: Johannes Weiner <jweiner@redhat.com>
> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Cc: Mel Gorman <mel@csn.ul.ie>
> Cc: Rik van Riel <riel@redhat.com>
> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
> ---
>  mm/shmem.c  |    1 +
>  mm/vmscan.c |   11 ++++++-----
>  2 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 2d35772..22cb349 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1068,6 +1068,7 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user)
>  		user_shm_unlock(inode->i_size, user);
>  		info->flags &= ~VM_LOCKED;
>  		mapping_clear_unevictable(file->f_mapping);
> +		smp_mb__after_clear_bit();
>  		scan_mapping_unevictable_pages(file->f_mapping);

I always get nervous when I see undocumented barriers.  Maybe add a
teensy tiny comment here?

	/*
	 * Ensure that a racing putback_lru_page() can see
	 * the pages of this mapping are evictable when we
	 * skip them due to !PageLRU during the scan.
	 */

Or something like that.  Otherwise, nice catch :-)

Acked-by: Johannes Weiner <jweiner@redhat.com>

WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <jweiner@redhat.com>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Mel Gorman <mel@csn.ul.ie>, Rik van Riel <riel@redhat.com>,
	Lee Schermerhorn <lee.schermerhorn@hp.com>
Subject: Re: [PATCH] vmscan: add barrier to prevent evictable page in unevictable list
Date: Wed, 28 Sep 2011 10:14:52 +0200	[thread overview]
Message-ID: <20110928081452.GC23535@redhat.com> (raw)
In-Reply-To: <1317174330-2677-1-git-send-email-minchan.kim@gmail.com>

On Wed, Sep 28, 2011 at 10:45:30AM +0900, Minchan Kim wrote:
> When racing between putback_lru_page and shmem_unlock happens,
> progrom execution order is as follows, but clear_bit in processor #1
> could be reordered right before spin_unlock of processor #1.
> Then, the page would be stranded on the unevictable list.
> 
> spin_lock
> SetPageLRU
> spin_unlock
>                                 clear_bit(AS_UNEVICTABLE)
>                                 spin_lock
>                                 if PageLRU()
>                                         if !test_bit(AS_UNEVICTABLE)
>                                         	move evictable list
> smp_mb
> if !test_bit(AS_UNEVICTABLE)
>         move evictable list
>                                 spin_unlock
> 
> But, pagevec_lookup in scan_mapping_unevictable_pages has rcu_read_[un]lock so
> it could protect reordering before reaching test_bit(AS_UNEVICTABLE) on processor #1
> so this problem never happens. But it's a unexpected side effect and we should
> solve this problem properly.
> 
> This patch adds a barrier after mapping_clear_unevictable.
> 
> side-note: I didn't meet this problem but just found during review.
> 
> Cc: Johannes Weiner <jweiner@redhat.com>
> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Cc: Mel Gorman <mel@csn.ul.ie>
> Cc: Rik van Riel <riel@redhat.com>
> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
> ---
>  mm/shmem.c  |    1 +
>  mm/vmscan.c |   11 ++++++-----
>  2 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 2d35772..22cb349 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1068,6 +1068,7 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user)
>  		user_shm_unlock(inode->i_size, user);
>  		info->flags &= ~VM_LOCKED;
>  		mapping_clear_unevictable(file->f_mapping);
> +		smp_mb__after_clear_bit();
>  		scan_mapping_unevictable_pages(file->f_mapping);

I always get nervous when I see undocumented barriers.  Maybe add a
teensy tiny comment here?

	/*
	 * Ensure that a racing putback_lru_page() can see
	 * the pages of this mapping are evictable when we
	 * skip them due to !PageLRU during the scan.
	 */

Or something like that.  Otherwise, nice catch :-)

Acked-by: Johannes Weiner <jweiner@redhat.com>

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2011-09-28  8:15 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-28  1:45 [PATCH] vmscan: add barrier to prevent evictable page in unevictable list Minchan Kim
2011-09-28  1:45 ` Minchan Kim
2011-09-28  2:21 ` KOSAKI Motohiro
2011-09-28  2:21   ` KOSAKI Motohiro
2011-09-28  2:25   ` Minchan Kim
2011-09-28  2:25     ` Minchan Kim
2011-09-28  2:48     ` KOSAKI Motohiro
2011-09-28  2:48       ` KOSAKI Motohiro
2011-09-28  8:14 ` Johannes Weiner [this message]
2011-09-28  8:14   ` Johannes Weiner
2011-09-28 18:03   ` Minchan Kim
2011-09-28 18:03     ` Minchan Kim
2011-09-29  9:54   ` [PATCH v2] " Minchan Kim
2011-09-29  9:54     ` Minchan Kim
2011-09-29 12:50     ` KOSAKI Motohiro
2011-09-29 12:50       ` KOSAKI Motohiro
2011-09-28 15:04 ` [PATCH] " Lin Ming
2011-09-28 15:04   ` Lin Ming
2011-09-28 18:05   ` Minchan Kim
2011-09-28 18:05     ` Minchan Kim
2011-09-29  1:02     ` Lin Ming
2011-09-29  1:02       ` Lin Ming

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=20110928081452.GC23535@redhat.com \
    --to=jweiner@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=lee.schermerhorn@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=minchan.kim@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.