All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ric Mason <ric.masonn@gmail.com>
To: Dan Magenheimer <dan.magenheimer@oracle.com>
Cc: devel@linuxdriverproject.org, linux-kernel@vger.kernel.org,
	gregkh@linuxfoundation.org, linux-mm@kvack.org,
	ngupta@vflare.org, Konrad Wilk <konrad.wilk@oracle.com>,
	sjenning@linux.vnet.ibm.com, minchan@kernel.org
Subject: Re: [PATCH] staging/zcache: Fix/improve zcache writeback code, tie to a config option
Date: Fri, 01 Mar 2013 08:35:18 +0800	[thread overview]
Message-ID: <512FF7C6.4090109@gmail.com> (raw)
In-Reply-To: <f6930e42-24d8-447c-9443-b4d3f5aa1418@default>

On 03/01/2013 06:29 AM, Dan Magenheimer wrote:
>> From: Ric Mason [mailto:ric.masonn@gmail.com]
>> Subject: Re: [PATCH] staging/zcache: Fix/improve zcache writeback code, tie to a config option
>>
>> On 02/07/2013 02:27 AM, Dan Magenheimer wrote:
>>> It was observed by Andrea Arcangeli in 2011 that zcache can get "full"
>>> and there must be some way for compressed swap pages to be (uncompressed
>>> and then) sent through to the backing swap disk.  A prototype of this
>>> functionality, called "unuse", was added in 2012 as part of a major update
>>> to zcache (aka "zcache2"), but was left unfinished due to the unfortunate
>>> temporary fork of zcache.
>>>
>>> This earlier version of the code had an unresolved memory leak
>>> and was anyway dependent on not-yet-upstream frontswap and mm changes.
>>> The code was meanwhile adapted by Seth Jennings for similar
>>> functionality in zswap (which he calls "flush").  Seth also made some
>>> clever simplifications which are herein ported back to zcache.  As a
>>> result of those simplifications, the frontswap changes are no longer
>>> necessary, but a slightly different (and simpler) set of mm changes are
>>> still required [1].  The memory leak is also fixed.
>>>
>>> Due to feedback from akpm in a zswap thread, this functionality in zcache
>>> has now been renamed from "unuse" to "writeback".
>>>
>>> Although this zcache writeback code now works, there are open questions
>>> as how best to handle the policy that drives it.  As a result, this
>>> patch also ties writeback to a new config option.  And, since the
>>> code still depends on not-yet-upstreamed mm patches, to avoid build
>>> problems, the config option added by this patch temporarily depends
>>> on "BROKEN"; this config dependency can be removed in trees that
>>> contain the necessary mm patches.
>>>
>>> [1] https://lkml.org/lkml/2013/1/29/540/ https://lkml.org/lkml/2013/1/29/539/
>> shrink_zcache_memory:
>>
>> while(nr_evict-- > 0) {
>>       page = zcache_evict_eph_pageframe();
>>       if (page == NULL)
>>           break;
>>       zcache_free_page(page);
>> }
>>
>> zcache_evict_eph_pageframe
>> ->zbud_evict_pageframe_lru
>>       ->zbud_evict_tmem
>>           ->tmem_flush_page
>>               ->zcache_pampd_free
>>                   ->zcache_free_page  <- zbudpage has already been free here
>>
>> If the zcache_free_page called in shrink_zcache_memory can be treated as
>> a double free?
> Thanks for the code review and sorry for the delay...
>
> zcache_pampd_free() only calls zcache_free_page() if page is non-NULL,
> but in this code path I think when zcache_pampd_free() calls
> zbud_free_and_delist(), that function determines that the zbudpage
> is dying and returns NULL.
>
> So unless I am misunderstanding (or misreading the code), there
> is no double free.

Oh, I see. Thanks for your response. :)

>
> Thanks,
> Dan

--
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: Ric Mason <ric.masonn@gmail.com>
To: Dan Magenheimer <dan.magenheimer@oracle.com>
Cc: devel@linuxdriverproject.org, linux-kernel@vger.kernel.org,
	gregkh@linuxfoundation.org, linux-mm@kvack.org,
	ngupta@vflare.org, Konrad Wilk <konrad.wilk@oracle.com>,
	sjenning@linux.vnet.ibm.com, minchan@kernel.org
Subject: Re: [PATCH] staging/zcache: Fix/improve zcache writeback code, tie to a config option
Date: Fri, 01 Mar 2013 08:35:18 +0800	[thread overview]
Message-ID: <512FF7C6.4090109@gmail.com> (raw)
In-Reply-To: <f6930e42-24d8-447c-9443-b4d3f5aa1418@default>

On 03/01/2013 06:29 AM, Dan Magenheimer wrote:
>> From: Ric Mason [mailto:ric.masonn@gmail.com]
>> Subject: Re: [PATCH] staging/zcache: Fix/improve zcache writeback code, tie to a config option
>>
>> On 02/07/2013 02:27 AM, Dan Magenheimer wrote:
>>> It was observed by Andrea Arcangeli in 2011 that zcache can get "full"
>>> and there must be some way for compressed swap pages to be (uncompressed
>>> and then) sent through to the backing swap disk.  A prototype of this
>>> functionality, called "unuse", was added in 2012 as part of a major update
>>> to zcache (aka "zcache2"), but was left unfinished due to the unfortunate
>>> temporary fork of zcache.
>>>
>>> This earlier version of the code had an unresolved memory leak
>>> and was anyway dependent on not-yet-upstream frontswap and mm changes.
>>> The code was meanwhile adapted by Seth Jennings for similar
>>> functionality in zswap (which he calls "flush").  Seth also made some
>>> clever simplifications which are herein ported back to zcache.  As a
>>> result of those simplifications, the frontswap changes are no longer
>>> necessary, but a slightly different (and simpler) set of mm changes are
>>> still required [1].  The memory leak is also fixed.
>>>
>>> Due to feedback from akpm in a zswap thread, this functionality in zcache
>>> has now been renamed from "unuse" to "writeback".
>>>
>>> Although this zcache writeback code now works, there are open questions
>>> as how best to handle the policy that drives it.  As a result, this
>>> patch also ties writeback to a new config option.  And, since the
>>> code still depends on not-yet-upstreamed mm patches, to avoid build
>>> problems, the config option added by this patch temporarily depends
>>> on "BROKEN"; this config dependency can be removed in trees that
>>> contain the necessary mm patches.
>>>
>>> [1] https://lkml.org/lkml/2013/1/29/540/ https://lkml.org/lkml/2013/1/29/539/
>> shrink_zcache_memory:
>>
>> while(nr_evict-- > 0) {
>>       page = zcache_evict_eph_pageframe();
>>       if (page == NULL)
>>           break;
>>       zcache_free_page(page);
>> }
>>
>> zcache_evict_eph_pageframe
>> ->zbud_evict_pageframe_lru
>>       ->zbud_evict_tmem
>>           ->tmem_flush_page
>>               ->zcache_pampd_free
>>                   ->zcache_free_page  <- zbudpage has already been free here
>>
>> If the zcache_free_page called in shrink_zcache_memory can be treated as
>> a double free?
> Thanks for the code review and sorry for the delay...
>
> zcache_pampd_free() only calls zcache_free_page() if page is non-NULL,
> but in this code path I think when zcache_pampd_free() calls
> zbud_free_and_delist(), that function determines that the zbudpage
> is dying and returns NULL.
>
> So unless I am misunderstanding (or misreading the code), there
> is no double free.

Oh, I see. Thanks for your response. :)

>
> Thanks,
> Dan


  reply	other threads:[~2013-03-01  0:35 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-06 18:27 [PATCH] staging/zcache: Fix/improve zcache writeback code, tie to a config option Dan Magenheimer
2013-02-06 18:27 ` Dan Magenheimer
2013-02-06 19:09 ` Greg KH
2013-02-06 19:09   ` Greg KH
2013-02-06 20:51   ` Dan Magenheimer
2013-02-06 20:51     ` Dan Magenheimer
2013-02-06 21:43     ` Greg KH
2013-02-06 21:43       ` Greg KH
2013-02-06 22:42       ` Dan Magenheimer
2013-02-06 22:42         ` Dan Magenheimer
2013-02-07  0:03         ` Greg KH
2013-02-07  0:03           ` Greg KH
2013-02-11 21:43           ` Dan Magenheimer
2013-02-11 21:43             ` Dan Magenheimer
2013-02-11 21:49             ` Greg KH
2013-02-11 21:49               ` Greg KH
2013-02-11 22:05               ` Dan Magenheimer
2013-02-11 22:05                 ` Dan Magenheimer
2013-02-13 16:55               ` Dan Magenheimer
2013-02-13 16:55                 ` Dan Magenheimer
2013-02-13 17:18                 ` Greg KH
2013-02-13 17:18                   ` Greg KH
2013-02-12 19:40             ` Konrad Rzeszutek Wilk
2013-02-12 19:40               ` Konrad Rzeszutek Wilk
2013-02-22  3:51 ` Ric Mason
2013-02-22  3:51   ` Ric Mason
2013-02-25 17:29   ` Dan Magenheimer
2013-02-25 17:29     ` Dan Magenheimer
2013-02-26  0:12     ` Ric Mason
2013-02-26  0:12       ` Ric Mason
2013-02-26 20:17       ` Dan Magenheimer
2013-02-26 20:17         ` Dan Magenheimer
2013-02-22  4:13 ` Ric Mason
2013-02-22  4:13   ` Ric Mason
2013-02-28 22:29   ` Dan Magenheimer
2013-02-28 22:29     ` Dan Magenheimer
2013-03-01  0:35     ` Ric Mason [this message]
2013-03-01  0:35       ` Ric Mason
  -- strict thread matches above, loose matches on Subject: below --
2013-02-11 22:07 Dan Magenheimer
2013-02-11 22:07 ` Dan Magenheimer

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=512FF7C6.4090109@gmail.com \
    --to=ric.masonn@gmail.com \
    --cc=dan.magenheimer@oracle.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=ngupta@vflare.org \
    --cc=sjenning@linux.vnet.ibm.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.