From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Nhat Pham <nphamcs@gmail.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
akpm@linux-foundation.org, hannes@cmpxchg.org,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
minchan@kernel.org, ngupta@vflare.org, sjenning@redhat.com,
ddstreet@ieee.org, vitaly.wool@konsulko.com,
kernel-team@meta.com
Subject: Re: [PATCH] zsmalloc: fix a race with deferred_handles storing
Date: Wed, 1 Feb 2023 12:29:16 +0900 [thread overview]
Message-ID: <Y9ncjPEFEU33ENVq@google.com> (raw)
In-Reply-To: <CAKEwX=My-B=KkocO0heMm=7e+Qxkg2RdRJ8pRHm9dBk+Cceyzw@mail.gmail.com>
On (23/01/31 18:28), Nhat Pham wrote:
> > On (23/01/10 15:17), Nhat Pham wrote:
> > [..]
> > > #ifdef CONFIG_ZPOOL
> > > +static void restore_freelist(struct zs_pool *pool, struct size_class *class,
> > > + struct zspage *zspage)
> > > +{
> > > + unsigned int obj_idx = 0;
> > > + unsigned long handle, off = 0; /* off is within-page offset */
> > > + struct page *page = get_first_page(zspage);
> > > + struct link_free *prev_free = NULL;
> > > + void *prev_page_vaddr = NULL;
> > > +
> > > + /* in case no free object found */
> > > + set_freeobj(zspage, (unsigned int)(-1UL));
> >
> > I'm not following this. I see how -1UL works for link_free, but this
> > cast of -1UL to 4 bytes looks suspicious.
>
> (resending this since I forgot to forward this to other recipients)
>
> It is a bit convoluted indeed. But the idea is that for the last object,
> the last link is given by:
>
> link->next = -1UL << OBJ_TAG_BITS
>
> And at malloc time, we update freeobj as follows
> set_freeobj(zspage, link->next >> OBJ_TAG_BITS);
>
> Which means the freeobj value would be set to something like this:
> (-1UL << OBJ_TAG_BITS) >> OBJ_TAG_BITS
Oh, good point. I see what you did there.
> I want to emulate this here (i.e in the case we have no free object).
Makes sense.
> As for the casting, I believe set_freeobj requires an unsigned int for
> the second field.
>
> Alternatively, to be 100% safe, we can do something like this:
> (unsigned int)((-1UL << OBJ_TAG_BITS) >> OBJ_TAG_BITS)
>
> But I think I got the same result as just (unsigned int)(-1UL)
Yeah, I guess they should be the same, as we take the lower 4 bytes
only.
prev parent reply other threads:[~2023-02-01 3:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-10 23:17 [PATCH] zsmalloc: fix a race with deferred_handles storing Nhat Pham
2023-01-11 19:56 ` Nhat Pham
2023-02-01 1:16 ` Sergey Senozhatsky
2023-02-01 1:41 ` Sergey Senozhatsky
2023-02-01 2:28 ` Nhat Pham
2023-02-01 3:29 ` Sergey Senozhatsky [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=Y9ncjPEFEU33ENVq@google.com \
--to=senozhatsky@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=ddstreet@ieee.org \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=ngupta@vflare.org \
--cc=nphamcs@gmail.com \
--cc=sjenning@redhat.com \
--cc=vitaly.wool@konsulko.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.