linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Hugh Dickins <hugh@veritas.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Balbir Singh <balbir@linux.vnet.ibm.com>,
	linux-mm@kvack.org
Subject: Re: [PATCH] memcg: memswap controller core swapcache fixes
Date: Mon, 24 Nov 2008 12:29:54 +0000 (GMT)	[thread overview]
Message-ID: <Pine.LNX.4.64.0811241154130.11615@blonde.site> (raw)
In-Reply-To: <20081124151542.3c1a4c88.kamezawa.hiroyu@jp.fujitsu.com>

On Mon, 24 Nov 2008, KAMEZAWA Hiroyuki wrote:
> On Mon, 24 Nov 2008 14:43:44 +0900
> KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > On Sun, 23 Nov 2008 22:11:07 +0000 (GMT)
> > Hugh Dickins <hugh@veritas.com> wrote:
> > > +	/*
> > > +	 * A racing thread's fault, or swapoff, may have already updated
> > > +	 * the pte, and even removed page from swap cache: return success
> > > +	 * to go on to do_swap_page()'s pte_same() test, which should fail.
> > > +	 */
> > > +	if (!PageSwapCache(page))
> > > +		return 0;
> > > +
> > >  	ent.val = page_private(page);
> 
> I think 
> ==
> 	if (!PageSwapCache(page))
> 		goto charge_cur_mm;
> ==
> is better.
> 
> In following case,
> ==
> 	CPUA				CPUB
> 				    remove_from_swapcache
> 	lock_page()                 <==========================(*)
> 	try_charge_swapin()          
> 	....
> 	commit_charge()
> ==
> At (*), the page may be fully unmapped and not charged
> (and PCG_USED bit is cleared.)
> If so, returing without any charge here means leak of charge.
> 
> Even if *charged* here,
>   - mem_cgroup_cancel_charge_swapin (handles !pte_same() case.)
>   - mem_cgroup_commit_charge_swapin (handles page is doubly charged case.)
> 
> try-commit-cancel is introduced to handle this kind of case and bug in my code
> is accessing page->private without checking PageSwapCache().

I've not studied your charging regime at all, but I think either
my way or yours should work.

There shouldn't be a leak of charge with my patch, because CPUB cannot
remove the page from swapcache until all references to that swap have
been removed: so do_swap_page's (second) pte_same test will fail, and
it'll goto out_nomap.

With my patch, no charge was made, ptr was left NULL and no uncharge
will be made: it was easier for me to see that way.  Doing it your
way, ptr will be set and charged and there will be uncharging to do.

But your way does look better, given that above we've already done
	if (!do_swap_account)
		goto charge_cur_mm;
It looks rather suspicious to "return 0" in some cases after that.

Which of us should update the patch to Andrew?  I'd prefer you
to do it, since you understand the charging and uncharging,
but I can send it if you're busy.

Hugh

--
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>

  reply	other threads:[~2008-11-24 12:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-23 21:53 [PATCH 0/8] mm: from gup to vmscan Hugh Dickins
2008-11-23 21:55 ` [PATCH 1/8] mm: gup persist for write permission Hugh Dickins
2008-11-23 21:56 ` [PATCH 2/8] mm: wp lock page before deciding cow Hugh Dickins
2008-11-23 21:58 ` [PATCH 3/8] mm: reuse_swap_page replaces can_share_swap_page Hugh Dickins
2008-11-23 22:11   ` [PATCH] memcg: memswap controller core swapcache fixes Hugh Dickins
2008-11-24  5:43     ` KAMEZAWA Hiroyuki
2008-11-24  6:15       ` KAMEZAWA Hiroyuki
2008-11-24 12:29         ` Hugh Dickins [this message]
2008-11-24 12:57           ` KAMEZAWA Hiroyuki
2008-11-23 22:43   ` [PATCH 3/8] mm: reuse_swap_page replaces can_share_swap_page Rik van Riel
2008-11-23 22:00 ` [PATCH 4/8] mm: try_to_free_swap replaces remove_exclusive_swap_page Hugh Dickins
2008-11-23 22:01 ` [PATCH 5/8] mm: try_to_unuse check removing right swap Hugh Dickins
2008-11-23 22:03 ` [PATCH 6/8] mm: remove try_to_munlock from vmscan Hugh Dickins
2008-11-23 22:53   ` Rik van Riel
2008-11-24 17:34   ` Lee Schermerhorn
2008-11-24 19:29     ` Hugh Dickins
2008-12-01 20:16       ` Lee Schermerhorn
2008-12-02  0:51         ` Hugh Dickins
2008-11-23 22:05 ` [PATCH 7/8] mm: remove gfp_mask from add_to_swap Hugh Dickins
2008-11-23 22:07 ` [PATCH 8/8] mm: add add_to_swap stub Hugh Dickins
2008-11-23 22:55   ` Rik van Riel
2008-11-24 13:49     ` Hugh Dickins
2008-11-24 13:53       ` [PATCH 9/8] mm: optimize get_scan_ratio for no swap Hugh Dickins
2008-11-24 14:11         ` Rik van Riel

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=Pine.LNX.4.64.0811241154130.11615@blonde.site \
    --to=hugh@veritas.com \
    --cc=akpm@linux-foundation.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-mm@kvack.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