From: Minchan Kim <minchan@kernel.org>
To: Sultan Alsawaf <sultan@kerneltoast.com>
Cc: stable@vger.kernel.org, Nitin Gupta <ngupta@vflare.org>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] zsmalloc: Fix races between asynchronous zspage free and page migration
Date: Wed, 11 May 2022 16:11:28 -0700 [thread overview]
Message-ID: <YnxCoCJJxk/1ONeP@google.com> (raw)
In-Reply-To: <Ynwuepzrr3krjLG0@sultan-box.localdomain>
On Wed, May 11, 2022 at 02:45:30PM -0700, Sultan Alsawaf wrote:
> On Wed, May 11, 2022 at 02:07:19PM -0700, Minchan Kim wrote:
> > Then, how about this?
>
> Your proposal is completely wrong still. My original patch is fine; we can stick
> with that.
>
> > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
> > index 9152fbde33b5..2f205c18aee4 100644
> > --- a/mm/zsmalloc.c
> > +++ b/mm/zsmalloc.c
> > @@ -1716,12 +1716,31 @@ static enum fullness_group putback_zspage(struct size_class *class,
> > * To prevent zspage destroy during migration, zspage freeing should
> > * hold locks of all pages in the zspage.
> > */
> > -static void lock_zspage(struct zspage *zspage)
> > +static void lock_zspage(struct zs_pool *pool, struct zspage *zspage)
> > {
> > - struct page *page = get_first_page(zspage);
> > -
> > + struct page *page;
> > + int nr_locked;
> > + struct page *locked_pages[ZS_MAX_PAGES_PER_ZSPAGE];
> > + struct address_space *mapping;
> > +retry:
> > + nr_locked = 0;
> > + memset(locked_pages, 0, sizeof(struct page) * ARRAY_SIZE(locked_pages));
>
> This memset() zeroes out memory past the end of the array because it is an array
> of pointers, not an array of page structs; the sizeof() is incorrect.
>
> > + page = get_first_page(zspage);
>
> You can't use get_first_page() outside of the migrate lock.
>
> > do {
> > lock_page(page);
>
> You can't lock a page that you don't own.
That's key point what my idea was wrong.
Thanks for correction!
prev parent reply other threads:[~2022-05-11 23:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-09 2:47 [PATCH] zsmalloc: Fix races between asynchronous zspage free and page migration Sultan Alsawaf
2022-05-10 0:06 ` Andrew Morton
2022-05-10 1:22 ` Sultan Alsawaf
2022-05-11 18:01 ` Minchan Kim
2022-05-11 19:50 ` Sultan Alsawaf
2022-05-11 20:43 ` Andrew Morton
2022-05-11 23:12 ` Minchan Kim
2022-05-11 21:07 ` Minchan Kim
2022-05-11 21:45 ` Sultan Alsawaf
2022-05-11 23:11 ` Minchan Kim [this message]
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=YnxCoCJJxk/1ONeP@google.com \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ngupta@vflare.org \
--cc=senozhatsky@chromium.org \
--cc=stable@vger.kernel.org \
--cc=sultan@kerneltoast.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.