All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Liu Shixin <liushixin2@huawei.com>
Cc: Seth Jennings <sjenning@redhat.com>,
	Dan Streetman <ddstreet@ieee.org>,
	Vitaly Wool <vitaly.wool@konsulko.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Nathan Chancellor <nathan@kernel.org>,
	Christoph Hellwig <hch@lst.de>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH -next v8 3/3] mm/zswap: delay the initialization of zswap
Date: Thu, 6 Apr 2023 16:53:47 +0200	[thread overview]
Message-ID: <20230406145347.GB11839@lst.de> (raw)
In-Reply-To: <20230403121318.1876082-4-liushixin2@huawei.com>

On Mon, Apr 03, 2023 at 08:13:18PM +0800, Liu Shixin wrote:
> Since some users may not use zswap, the zswap_pool is wasted. Save memory
> by delaying the initialization of zswap until enabled.
> 
> Signed-off-by: Liu Shixin <liushixin2@huawei.com>
> ---
>  mm/zswap.c | 56 +++++++++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 43 insertions(+), 13 deletions(-)
> 
> diff --git a/mm/zswap.c b/mm/zswap.c
> index 9169c2baee87..14db57450bfd 100644
> --- a/mm/zswap.c
> +++ b/mm/zswap.c
> @@ -81,6 +81,8 @@ static bool zswap_pool_reached_full;
>  
>  #define ZSWAP_PARAM_UNSET ""
>  
> +static int zswap_setup(void);
> +
>  /* Enable/disable zswap */
>  static bool zswap_enabled = IS_ENABLED(CONFIG_ZSWAP_DEFAULT_ON);
>  static int zswap_enabled_param_set(const char *,
> @@ -222,6 +224,9 @@ enum zswap_init_type {
>  
>  static enum zswap_init_type zswap_init_state;
>  
> +/* used to ensure the integrity of initialization */
> +static DEFINE_MUTEX(zswap_init_lock);
> +
>  /* init completed, but couldn't create the initial pool */
>  static bool zswap_has_pool;
>  
> @@ -654,7 +659,7 @@ static struct zswap_pool *zswap_pool_create(char *type, char *compressor)
>  	return NULL;
>  }
>  
> -static __init struct zswap_pool *__zswap_pool_create_fallback(void)
> +static struct zswap_pool *__zswap_pool_create_fallback(void)
>  {
>  	bool has_comp, has_zpool;
>  
> @@ -763,21 +768,28 @@ static int __zswap_param_set(const char *val, const struct kernel_param *kp,
>  	char *s = strstrip((char *)val);
>  	int ret;
>  
> +	mutex_lock(&zswap_init_lock);
>  	switch (zswap_init_state) {
>  	case ZSWAP_UNINIT:
>  		/* if this is load-time (pre-init) param setting,
>  		 * don't create a pool; that's done during init.
>  		 */
> -		return param_set_charp(s, kp);
> +		ret = param_set_charp(s, kp);
> +		mutex_unlock(&zswap_init_lock);
> +		return ret;
>  	case ZSWAP_INIT_SUCCEED:
>  		/* no change required */
> -		if (!strcmp(s, *(char **)kp->arg) && zswap_has_pool)
> +		if (!strcmp(s, *(char **)kp->arg) && zswap_has_pool) {
> +			mutex_unlock(&zswap_init_lock);
>  			return 0;
> +		}
>  		break;
>  	case ZSWAP_INIT_FAILED:
>  		pr_err("can't set param, initialization failed\n");
> +		mutex_unlock(&zswap_init_lock);
>  		return -ENODEV;
>  	}
> +	mutex_unlock(&zswap_init_lock);

The pattern here looks a bit odd.  Can you split the code that
the ZSWAP_INIT_SUCCEED case falls through into a helper, then just
assign ret inside the switch statement, break out and do a single
unlock and return?

> +	/*if this is load-time (pre-init) param setting, only set param.*/

missing space after the initial and before the last * here.

But except for these nitpicks this version looks good to me now.


      reply	other threads:[~2023-04-06 14:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-03 12:13 [PATCH -next v8 0/3] Delay the initialization of zswap Liu Shixin
2023-04-03 12:13 ` [PATCH -next v8 1/3] mm/zswap: remove zswap_entry_cache_{create,destroy} helper function Liu Shixin
2023-04-03 12:13 ` [PATCH -next v8 2/3] mm/zswap: replace zswap_init_{started/failed} with zswap_init_state Liu Shixin
2023-04-06 14:51   ` Christoph Hellwig
2023-04-03 12:13 ` [PATCH -next v8 3/3] mm/zswap: delay the initialization of zswap Liu Shixin
2023-04-06 14:53   ` Christoph Hellwig [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=20230406145347.GB11839@lst.de \
    --to=hch@lst.de \
    --cc=akpm@linux-foundation.org \
    --cc=ddstreet@ieee.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=liushixin2@huawei.com \
    --cc=nathan@kernel.org \
    --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.