From patchwork Mon Apr 3 12:13:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Shixin X-Patchwork-Id: 13198067 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A245EC761A6 for ; Mon, 3 Apr 2023 11:23:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 436236B0075; Mon, 3 Apr 2023 07:23:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 208876B007E; Mon, 3 Apr 2023 07:23:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 004D56B0078; Mon, 3 Apr 2023 07:23:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E2EF66B0075 for ; Mon, 3 Apr 2023 07:23:24 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A8F88C085B for ; Mon, 3 Apr 2023 11:23:24 +0000 (UTC) X-FDA: 80639843928.27.24E4DBE Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf02.hostedemail.com (Postfix) with ESMTP id 44F798001A for ; Mon, 3 Apr 2023 11:23:20 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf02.hostedemail.com: domain of liushixin2@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=liushixin2@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680521003; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6Wnl248RCeCdo+HYWpPSpCnYRwfYdYKhS5X30g43pxw=; b=rmvy5qzS3s1Gwe6bL5YQyf/1x7Y5z/M8Bmat7yZt8HJSVDQnhNtCZJWHOjXZvs6nT8kwjG iYgl4tm40CDTXh0zTI3+rlQ7d/2UwzclXL4oG3wzfDH0vh1uPCNwTg72bkGSfOgh2TIRs6 RgF38AlwtWMFdLLCGvWG3VjPMy6hq7c= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf02.hostedemail.com: domain of liushixin2@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=liushixin2@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680521003; a=rsa-sha256; cv=none; b=iPlzhoTdGZTL+lJ7VBEHfFabyCTPfvPps1N1SLvN1zliNFNNFLVdYIjSkQLNsG3twau1+m DVWr2VqhD+N+HEIB/5oVZzYeJv8wQqUIyvJNHgBad+apqKrNSUxs52x19oKMisfVsrwJ+5 wYWHmlWsetlV3Suxjq7u1RoEjvWxoAU= Received: from dggpemm100009.china.huawei.com (unknown [172.30.72.54]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4PqpMZ3vWqz17R6b; Mon, 3 Apr 2023 19:19:54 +0800 (CST) Received: from huawei.com (10.175.113.32) by dggpemm100009.china.huawei.com (7.185.36.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Mon, 3 Apr 2023 19:23:16 +0800 From: Liu Shixin To: Seth Jennings , Dan Streetman , Vitaly Wool , Andrew Morton , Nathan Chancellor , Christoph Hellwig CC: , , Liu Shixin Subject: [PATCH -next v8 2/3] mm/zswap: replace zswap_init_{started/failed} with zswap_init_state Date: Mon, 3 Apr 2023 20:13:17 +0800 Message-ID: <20230403121318.1876082-3-liushixin2@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230403121318.1876082-1-liushixin2@huawei.com> References: <20230403121318.1876082-1-liushixin2@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.113.32] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To dggpemm100009.china.huawei.com (7.185.36.113) X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 44F798001A X-Stat-Signature: x9cxc6ioarrsn7wqdwdipszzn8c3t7qc X-HE-Tag: 1680521000-711069 X-HE-Meta: U2FsdGVkX19FG6MVQMUhTzAoqG3PbkbMigvfX2KXr/JUcJIrBDiyfw52JDGRORo+PwOlUT2gSxjkUfCJjmIt+faL7jta/PCr+uS5K2XT64uIlkwqqodnrxFKeRv05LdGrPraZ0B+f30MoRLmdnamy5qhjW8OrNZQmehx3O5Y4ePe2EQQRAz+CZ+taglpR3ASfwU9FULpkiN0H7qF2dHZRpSjM/B3DZPHXCaQB/ijholC9nVzOQpbNg87tLqY41tiCHeE9LbC/URyGWwPJl993y+CkEaLFiKzgnpZfz0S5Ea3w9xVYS8F+BImVLPXr2roZnvPy2kERpgqMcs5xYD+Py/Ryf/FEs02X0CrASok2w80e5WnpjbA+49Ah0WqBpWb4h3z8ugAP8vw2EpFeX9o54F2EvzrlpYNxAJiYkMLZWuNg1G1zQcChteUDoRRNxhqVgusp6ZlC2zGPFvuqs/0rSIA0pGSC56yAUm3NVIEyPzsLen3dX3Etkb3povU7N6ZuJTCuNlD3BVsAgoDT9gbC3gfNcCPe0R6YopeI+Hzv6aXBPGffoETrBSTdNYQ1Ur/breqhRpUu7p+ZsdO7qx9vCMbgp6IfJ6DqiCnHri/jLsrMOsaIYBd3hYX+E+jbesMTolyWKSRfXDrL2ztcbPFW1g/ums8ysBoIHdGmcrMb9nzMOjRo5dkvIE0B3t1nXXzlRXvDUpKVkIgQ4ACOtF4uyjGCv5illJjFLGRpJVSv4I5jgZfYuHM3HtY2avJA/hPZFvrxJABMDsWBxg2eiQd2p2hWwzGth/mFxKIshTLa6hqAJa0vBWEbm50+Fqn5ELXzFVYY9F2m/PEe922wDxazcwx6V1nqbk0vrZj1TjltrmReAw4aC7eCOwPwa/CcQu7dM0B2yJZA1V+bLb6X4YU/gku+xSMPwIyLLPElrT8yVjtY2JrvpU6OSW3NWlJ35LFzoXAYuXvEfBOevlk+OY NHNyxiDA PxUr60MOMx2Z+caROI6B4XdzA2xWUY7RUxLLbeCM6RPACCyQdChU+6zpbrSZxAxO8Q+dvkoVx9AGFK+K8k6mqdZbaqzQghKg8VaF8mWfuWYdDzZT0aR8aS79KYW9dG9kk8BhhshMheIj0pSbvrBFsl7xr15BQPZcMTSDIGr/vB8o7PiXwbRAA3FvTrwPKaOUAFdwTWZXo+XCDCqk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The zswap_init_started variable name has a bit confusing. Actually, there are three state: uninitialized, initial failed and initial succeed. Add a new variable zswap_init_state to replace zswap_init_{started/failed}. Signed-off-by: Liu Shixin Reviewed-by: Christoph Hellwig --- mm/zswap.c | 55 +++++++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 6d2b879f091e..9169c2baee87 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -214,11 +214,13 @@ static DEFINE_SPINLOCK(zswap_pools_lock); /* pool counter to provide unique names to zpool */ static atomic_t zswap_pools_count = ATOMIC_INIT(0); -/* used by param callback function */ -static bool zswap_init_started; +enum zswap_init_type { + ZSWAP_UNINIT, + ZSWAP_INIT_SUCCEED, + ZSWAP_INIT_FAILED +}; -/* fatal error during init */ -static bool zswap_init_failed; +static enum zswap_init_type zswap_init_state; /* init completed, but couldn't create the initial pool */ static bool zswap_has_pool; @@ -761,21 +763,22 @@ static int __zswap_param_set(const char *val, const struct kernel_param *kp, char *s = strstrip((char *)val); int ret; - if (zswap_init_failed) { + 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); + case ZSWAP_INIT_SUCCEED: + /* no change required */ + if (!strcmp(s, *(char **)kp->arg) && zswap_has_pool) + return 0; + break; + case ZSWAP_INIT_FAILED: pr_err("can't set param, initialization failed\n"); return -ENODEV; } - /* no change required */ - if (!strcmp(s, *(char **)kp->arg) && zswap_has_pool) - return 0; - - /* if this is load-time (pre-init) param setting, - * don't create a pool; that's done during init. - */ - if (!zswap_init_started) - return param_set_charp(s, kp); - if (!type) { if (!zpool_has_pool(s)) { pr_err("zpool %s not available\n", s); @@ -864,16 +867,19 @@ static int zswap_zpool_param_set(const char *val, static int zswap_enabled_param_set(const char *val, const struct kernel_param *kp) { - if (zswap_init_failed) { + switch (zswap_init_state) { + case ZSWAP_UNINIT: + return param_set_bool(val, kp); + case ZSWAP_INIT_SUCCEED: + if (!zswap_has_pool) { + pr_err("can't enable, no pool configured\n"); + return -ENODEV; + } else + return param_set_bool(val, kp); + case ZSWAP_INIT_FAILED: pr_err("can't enable, initialization failed\n"); return -ENODEV; } - if (!zswap_has_pool && zswap_init_started) { - pr_err("can't enable, no pool configured\n"); - return -ENODEV; - } - - return param_set_bool(val, kp); } /********************************* @@ -1476,8 +1482,6 @@ static int __init init_zswap(void) struct zswap_pool *pool; int ret; - zswap_init_started = true; - zswap_entry_cache = KMEM_CACHE(zswap_entry, 0); if (!zswap_entry_cache) { pr_err("entry cache creation failed\n"); @@ -1518,6 +1522,7 @@ static int __init init_zswap(void) goto destroy_wq; if (zswap_debugfs_init()) pr_warn("debugfs initialization failed\n"); + zswap_init_state = ZSWAP_INIT_SUCCEED; return 0; destroy_wq: @@ -1531,7 +1536,7 @@ static int __init init_zswap(void) kmem_cache_destroy(zswap_entry_cache); cache_fail: /* if built-in, we aren't unloaded on failure; don't allow use */ - zswap_init_failed = true; + zswap_init_state = ZSWAP_INIT_FAILED; zswap_enabled = false; return -ENOMEM; }