From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Yosry Ahmed <yosry@kernel.org>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Andrew Morton <akpm@linux-foundation.org>,
Nhat Pham <nphamcs@gmail.com>,
Yosry Ahmed <yosry.ahmed@linux.dev>,
Johannes Weiner <hannes@cmpxchg.org>,
Brian Geffon <bgeffon@google.com>,
Minchan Kim <minchan@kernel.org>,
Richard Chang <richardycc@google.com>,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH 6/7] zsmalloc: fold zs_obj_write() into zs_store()
Date: Tue, 10 Nov 2026 11:45:49 +0900 [thread overview]
Message-ID: <avKFDz0PGwkbwNgz@google.com> (raw)
In-Reply-To: <auy6wQIz89NxpskT@google.com>
On (26/11/05 17:29), Yosry Ahmed wrote:
[..]
> > Most of the memory allocation APIs use GFP flags to express how that
> > memory should be allocated. The GFP acronym stands for "get free
> > diff --git a/Documentation/mm/zsmalloc.rst b/Documentation/mm/zsmalloc.rst
> > index dbb5c1a8dcc3..52eaba8f97e9 100644
> > --- a/Documentation/mm/zsmalloc.rst
> > +++ b/Documentation/mm/zsmalloc.rst
> > @@ -20,9 +20,9 @@ For simplicity, zsmalloc can only allocate objects of size up to PAGE_SIZE
> > since this satisfies the requirements of all its current users (in the
> > worst case, page is incompressible and is thus stored "as-is" i.e. in
> > uncompressed form). For allocation requests larger than this size, failure
> > -is returned (see zs_malloc).
> > +is returned (see zs_store).
> >
> > -Additionally, zs_malloc() does not return a dereferenceable pointer.
> > +Additionally, zs_store() does not return a dereferenceable pointer.
>
> Well, it doesn't return a pointer at all now.
Ack.
[..]
> > -void zs_obj_write(struct zs_pool *pool, struct zs_handle *handle,
> > - void *handle_mem, size_t mem_len)
> > +static void obj_write(struct size_class *class, struct zspage *zspage,
> > + unsigned long obj, const void *handle_mem,
> > + size_t mem_len)
>
> Should handle_mem and mem_len be renamed now?
Ack.
> Also, there's a comment in zs_page_migrate() referring to zs_obj_read/write().
Ack.
[..]
> > @@ -1318,12 +1306,16 @@ int zs_malloc(struct zs_pool *pool, struct zs_handle *handle, size_t size,
> > spin_lock(&class->lock);
> > zspage = find_get_zspage(class);
> > if (likely(zspage)) {
> > - obj_malloc(pool, zspage, handle);
> > + obj = obj_malloc(pool, zspage, handle);
> > /* Now move the zspage to another fullness group, if required */
> > fix_fullness_group(class, zspage);
> > class_stat_add(class, ZS_OBJS_INUSE, 1);
> > + zspage_read_lock(zspage);
>
> The zspage lock is now acquired under the class lock instead of the pool
> lock, this is probably fine but worth calling out explicitly in the
> changelog.
Let me take a close look. Lockdep didn't complain, but let me look more
into it.
> > + spin_unlock(&class->lock);
> >
> > - goto out;
> > + obj_write(class, zspage, obj, src, size);
> > + zspage_read_unlock(zspage);
> > + return 0;
> > }
> >
> > spin_unlock(&class->lock);
> > @@ -1332,8 +1324,14 @@ int zs_malloc(struct zs_pool *pool, struct zs_handle *handle, size_t size,
> > if (!zspage)
> > return -ENOMEM;
> >
> > + /*
> > + * New zspage is not in class->fullness_list or movable yet, so we
> > + * can allocate the object and copy data before taking class->lock.
> > + */
> > + obj = obj_malloc(pool, zspage, handle);
> > + obj_write(class, zspage, obj, src, size);
> > +
> > spin_lock(&class->lock);
> > - obj_malloc(pool, zspage, handle);
>
> Should moving obj_malloc() and obj_write() outside class->lock (and
> skipping zspage_read_lock()) for new zspages be split into a separate
> patch on top? AFAICT, it's a separate change from merging the
> interfaces.
Let me take a look.
next prev parent reply other threads:[~2026-11-10 2:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 4:47 [PATCH 0/7] zsmalloc: redesign object alloc API Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 1/7] zram: drop stale comment in write_incompressible_page() Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 2/7] zram: drop get_slot_handle() and set_slot_handle() Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 3/7] zsmalloc: switch handle type to struct zs_handle Sergey Senozhatsky
2026-11-05 17:03 ` Yosry Ahmed
2026-11-10 2:42 ` Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 4/7] zram: allocate zsmalloc object under slot lock Sergey Senozhatsky
2026-11-06 4:48 ` sashiko-bot
2026-11-10 3:01 ` Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 5/7] zsmalloc: embed struct zs_handle into zram and zswap entries Sergey Senozhatsky
2026-11-05 17:19 ` Yosry Ahmed
2026-11-10 2:51 ` Sergey Senozhatsky
2026-11-10 3:12 ` Sergey Senozhatsky
2026-11-05 17:30 ` Yosry Ahmed
2026-11-10 2:44 ` Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 6/7] zsmalloc: fold zs_obj_write() into zs_store() Sergey Senozhatsky
2026-11-05 17:29 ` Yosry Ahmed
2026-11-10 2:45 ` Sergey Senozhatsky [this message]
2026-11-10 5:09 ` Sergey Senozhatsky
2026-11-05 4:47 ` [PATCH 7/7] zsmalloc: constify struct zs_handle pointer in read-only functions Sergey Senozhatsky
2026-11-05 17:31 ` [PATCH 0/7] zsmalloc: redesign object alloc API Yosry Ahmed
2026-11-05 17:36 ` Nhat Pham
2026-11-05 17:39 ` Yosry Ahmed
2026-11-10 5:49 ` Sergey Senozhatsky
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=avKFDz0PGwkbwNgz@google.com \
--to=senozhatsky@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=bgeffon@google.com \
--cc=hannes@cmpxchg.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=nphamcs@gmail.com \
--cc=richardycc@google.com \
--cc=yosry.ahmed@linux.dev \
--cc=yosry@kernel.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 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.