Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp5414366rwn; Mon, 12 Sep 2022 08:42:10 -0700 (PDT) X-Google-Smtp-Source: AA6agR5ujt2B1aPYAqRcIYNfo7hxYS4TQE/Z7VmXaPtMnYUA4ojnDpG1bCfr5uEWJ5FWNjj446ZH X-Received: by 2002:a17:907:3fa1:b0:77b:6f08:a2f9 with SMTP id hr33-20020a1709073fa100b0077b6f08a2f9mr7596266ejc.52.1662997329739; Mon, 12 Sep 2022 08:42:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662997329; cv=none; d=google.com; s=arc-20160816; b=VySM7gayl8/2fIy3kegfa+c0AdD18KNlW3dSL043bSUAlRoo6/+ZqyNJ+H7vNZuwKm qjj+JuOoh9Au2GAK+VYKYCxOZaRlzWn+exrMzTY/xqEEPYss7ofr+MkoyXoyEiq43z1x Z8LwT50Ssg/Y4R0mAoEBRLChyni6LN4AHlQ3CxY+3vZ9ADICz3xntIVylC5aRaZLFKf5 LIqm/4WoFOQXiuVi6BZgMhypNtFxQcO4UiBv4Y+VSbCv2lAwanLaEdL56+8lncazUnOm KybFclbDC95eonmKE32VStLcBvaMUD/RqiG8vi+tK49PSLS12bI+V6kaRW+EaYx4jfCI AASg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=CPqjDBRnfd3YUUYjuwzH1YFz7BdjyfL6bOnI/3LB5Bk=; b=IXLDQ5WwMGVt4VwOsqail51X4/PxKRrIh17tX+vRIbZ+Js608iS9ckqTYA6qb7NNUF 9WKoafVdlv2expp88tItP3aAYsmT+vfbWCnMKQISABeFfO3E7wUplt+KLQaxZDEqCEUL xQmxeEP4/WO2r3abexFgZCu5S71QlnfhOTlUEn054dxlBrpJxWyhOiGqss5lJXCXCm3T UeE2G7ElEG8KrEyJ4we8Yk7h0V9l4G5vhgcxmMWE30zKSJBSQ7FnhiG3PIyTB8NzB+pj MMUHhuGxTo9B8usBk8D6/dUderrfSx4YmXTR5gjEkV18f2B5gIu4f70OePT8lbszYuAK IbqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=hIYiAqgr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sc32-20020a1709078a2000b0077d08e266ccsi3570661ejc.158.2022.09.12.08.41.41; Mon, 12 Sep 2022 08:42:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=hIYiAqgr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230301AbiILP32 (ORCPT + 99 others); Mon, 12 Sep 2022 11:29:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230258AbiILP3Z (ORCPT ); Mon, 12 Sep 2022 11:29:25 -0400 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FE0524BDD for ; Mon, 12 Sep 2022 08:29:24 -0700 (PDT) Received: by mail-pj1-x102d.google.com with SMTP id j6-20020a17090a694600b00200bba67dadso8510315pjm.5 for ; Mon, 12 Sep 2022 08:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date; bh=CPqjDBRnfd3YUUYjuwzH1YFz7BdjyfL6bOnI/3LB5Bk=; b=hIYiAqgrhPuKXd5jVuPdYSi5Zizxj4WGgX6YJ2Oh96Mtz4pq2+QH5so6OLdi/7M2Bn 3UG82Fno3pnL7Pkj6jWxE2NNfpvvGrTA2oHiKOd2jgC0YmcPxysBoYBI/QbllbhMceAS Yq4gYXpNdceW218uHLM738DLTZg5il7HIaNDs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date; bh=CPqjDBRnfd3YUUYjuwzH1YFz7BdjyfL6bOnI/3LB5Bk=; b=2U0l8V0Of6GfBuX7bhDltZGkfLVoo5Ro6PJqZBi8ynz2Okm/bcSAWN/JTwK6qF7ACB 2SLY1vt6EpCE/FudVCLVljiZ2WoEQiDNZ1216fSeR22C7uk7gnSUCL4DZt5erXBWzscz q1WPH0+6Og4EJX4jqUXSgLYFO+kI9YhpPPoTOF7a+7ojASigRT9VpwFGWgnXKVIZqiWq wQ+/aHHsP06H/qW8ZNO+GCgvRGEXUPgxfNGtZJh/c1mNmeDAnpZFRlecsqPC8fodEzKK 2+XEkNw056HLtavDN8C3VFt5cexXyCLpZs139PH8k6G7jkg9PHXmDLTKqZv8QJlkPI61 Fcnw== X-Gm-Message-State: ACgBeo1PsD9RKfcBuUR87lGxYopyUg5kyBiCxyAu9lx2UeB0TL44tRVC q5vO2nRUBIiinN/Bii12aNU1VKiU/XBbDA== X-Received: by 2002:a17:902:e947:b0:170:d739:8cbe with SMTP id b7-20020a170902e94700b00170d7398cbemr27884626pll.141.1662996563948; Mon, 12 Sep 2022 08:29:23 -0700 (PDT) Received: from tigerii.tok.corp.google.com ([2401:fa00:8f:203:e064:d5ac:4dae:9920]) by smtp.gmail.com with ESMTPSA id l72-20020a63914b000000b00419ab8f8d2csm5748847pge.20.2022.09.12.08.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Sep 2022 08:29:23 -0700 (PDT) From: Sergey Senozhatsky To: Minchan Kim , Andrew Morton Cc: Nitin Gupta , Brian Geffon , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Sergey Senozhatsky Subject: [PATCHv2] zram: do not waste zram_table_entry flags bits Date: Tue, 13 Sep 2022 00:27:44 +0900 Message-Id: <20220912152744.527438-1-senozhatsky@chromium.org> X-Mailer: git-send-email 2.37.2.789.g6183377224-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org zram_table_entry::flags stores object size in the lower bits and zram pageflags in the upper bits. However, for some reason, we use 24 lower bits, while maximum zram object size is PAGE_SIZE, which requires PAGE_SHIFT bits (up to 16 on arm64). This wastes 24 - PAGE_SHIFT bits that we can use for additional zram pageflags instead. Also add a BUILD_BUG_ON() to alert us should we run out of bits in zram_table_entry::flags. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/zram_drv.c | 2 ++ drivers/block/zram/zram_drv.h | 15 +++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index f3948abce2f7..07913bcdb5c2 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -2449,6 +2449,8 @@ static int __init zram_init(void) { int ret; + BUILD_BUG_ON(__NR_ZRAM_PAGEFLAGS > BITS_PER_LONG); + ret = cpuhp_setup_state_multi(CPUHP_ZCOMP_PREPARE, "block/zram:prepare", zcomp_cpu_up_prepare, zcomp_cpu_dead); if (ret < 0) diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index b4eecef2a11f..2b50f0521bd3 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -30,16 +30,15 @@ /* - * The lower ZRAM_FLAG_SHIFT bits of table.flags is for - * object size (excluding header), the higher bits is for - * zram_pageflags. + * ZRAM is mainly used for memory efficiency so we want to keep memory + * footprint small and thus squeeze size and zram pageflags into a flags + * member. The lower ZRAM_FLAG_SHIFT bits is for object size (excluding + * header), which cannot be larger than PAGE_SIZE (requiring PAGE_SHIFT + * bits), the higher bits are for zram_pageflags. * - * zram is mainly used for memory efficiency so we want to keep memory - * footprint small so we can squeeze size and flags into a field. - * The lower ZRAM_FLAG_SHIFT bits is for object size (excluding header), - * the higher bits is for zram_pageflags. + * We use BUILD_BUG_ON() to make sure that zram pageflags don't overflow. */ -#define ZRAM_FLAG_SHIFT 24 +#define ZRAM_FLAG_SHIFT (PAGE_SHIFT + 1) /* Flags for zram pages (table[page_no].flags) */ enum zram_pageflags { -- 2.37.2.789.g6183377224-goog