From nobody Mon Feb 9 07:26:27 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B5E032D0E8 for ; Thu, 15 Jan 2026 08:08:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768464527; cv=none; b=rzTlyXCsL486RWaa7xpsPFpD9hqkDPJpq+e4VYKTr/uLLChUgYqaBzMI7mH5jx3+IQyWbUo+ZTdT/vf8HE7F3JLlYefoTn9K0VvV0zwTMJnucjRZ1ng5tvvUf7NKYCZxFWlh8zMaitfdnLmEN2MtVKmPbwjiYTL8JgtAT6vRwRs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768464527; c=relaxed/simple; bh=p7eN+bVWWxkL7QedYYdVjpIWfOntnf+VDkriJhWfYZ8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=RxLW2QRsHPUnfZZnPmcrRiXctRWcDV8az3E+esOhPWwkw6FCdWiXpyvrW8kA3mGhkIQXPzMTU/9ta+nnGkt3sHky6cU04cX4mWAwhSISbYSWktlLwvq037q0p1NC0LYY6bgKgoZDJKPnjQuDjf9KEHvd6hir6v4VLvLnP+/gYCE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=NoRfQuur; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="NoRfQuur" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-81f3b4ae67bso350314b3a.1 for ; Thu, 15 Jan 2026 00:08:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1768464525; x=1769069325; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=LtWA5RxXbbzoB3uOwGRmhTGGY6Hy9BUvOwDXsRsPtHE=; b=NoRfQuurZO70osBSIV5I+g5rHnhXQhSwXLN6CiFahZ4114DRNjDD8+yJncob2c+JTU FCw0yGTB9NrPi4rGUPQs1hs8y2CgJGtvK+kvjrpvk1PUNnCyIrpbM9XdlJp9TGDrPK2H UPgOScp2ls5PudGI7gN2064ImAEVAnPytWTQU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768464525; x=1769069325; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LtWA5RxXbbzoB3uOwGRmhTGGY6Hy9BUvOwDXsRsPtHE=; b=DvWpIWRJUUDT6scQqNGkA73RADPHrNcJ8jTzPUiy8TnjrBjjM3ZqkKGGZP4o2yK+Cl xMmSpU2x9OimsMq8UqfyrCgNdGrWoTOGiou9rUjvsOt32tLyFj6BK3DicETTqgAKjma7 0FUDtt3tIFaaQNnxxajzghPFIri7b2dbUeBrVQUSF8t96+NN6gmzsToJG42b8Cq3FrP8 kIHNFf0LkfvV/ypmzXm9WlOD4FI00sOpdnItm9CYlMnQCE1mESe7NOdZHcMuJFqZWiHp S5VnXMc2mNTJTC9Nwkffcql0aTY6tfzZAmbukoVUT4sh2H9QWmNGUWZ6zaxJMe77WxhJ PbyQ== X-Forwarded-Encrypted: i=1; AJvYcCUJJNvN4TStRr5SnMx0MTxASAs4JAo1ZBKRnFoi4UZtscakqlFX4h5KM++b75ZwXaseJnbIGfEQ7PAZZns=@vger.kernel.org X-Gm-Message-State: AOJu0Yzvs1tQg+oY0r+Kt/630ZFr22OajPFs787y5k6sl+7muPmvqbKV 7wMw0yoJ4LsEfCngvBM0FB49s0yvEnrdObqmD5iYODk6b4uH3etytPc8JcyclsP3jg== X-Gm-Gg: AY/fxX5Tu2MuRuDTXAhcpXmEzWlQqSEni8Jh/Keteyk5OHat+bGnPci4UPnF8wUFScc 7BizrKoSJxovR1cklM8hlNuW3sS5ER0cd0xMc9Pc+hPYHpxnCBMzOS7xfU10INO15SVaSF3PQTG wHrJ66pbbXO3QYS2mAUQj+awScBGVt7nxkLilFwTKz9asFBT1gFjYeiAXiCr47fnjFker9oxcUf L2yZCROX8UNh7KHKC9rCMbZWHYlCfarZ7h4amEKio0KTHAihx0413/HfYnJtQ9ZERh2koFNWyQa ssw2TcfY2X9eC1HNxZD/j5ogTQn9yB6dZaR5RTp0L1iVWCkqiQqhIihLxalxSUlxiKdIl+NVPoW pgZb5a3LpDbJrS57NV+dqEYs7JOY+fkTIF9UcOg8aRqMZxg5dQB40siifjtK4+mtDwQpWY2Go4A 9lsogCmnmhCoHT8VUiPTwPHktcqyCakUbymL/TnAmysULNHVpsoKpdA+buAuZ4Ax++FDe03UGD X-Received: by 2002:a05:6a20:3954:b0:361:4f82:e545 with SMTP id adf61e73a8af0-38bed1ff87emr5376591637.53.1768464524847; Thu, 15 Jan 2026 00:08:44 -0800 (PST) Received: from tigerii.tok.corp.google.com ([2a00:79e0:2031:6:5147:712:23d1:5e38]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c4cbf28ebe4sm24449235a12.4.2026.01.15.00.08.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 00:08:43 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , Brian Geffon , linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, Sergey Senozhatsky Subject: [PATCH] zram: rename init_lock to dev_lock Date: Thu, 15 Jan 2026 17:08:07 +0900 Message-ID: <20260115080807.3957860-1-senozhatsky@chromium.org> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" init_lock has completely outgrown its initial purpose and is no longer used only to "prevent concurrent execution of device init" as the stale comment suggests. The scope of this lock is much bigger now. These days this lock (rw_semaphore) controls how a task owns the corresponding zram device: either in shared mode or in exclusive mode. All zram device attribute writes should own the device in exclusive mode, which synchronizes these tasks and prevents, for example, concurrent execution of recompression and writeback. All zram device attribute reads should own the device in shared mode. Rename the lock to dev_lock to better reflect its current purpose. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/zram_drv.c | 60 +++++++++++++++++------------------ drivers/block/zram/zram_drv.h | 4 +-- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 912711faa4e4..1908fc66c050 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -365,7 +365,7 @@ static ssize_t initstate_show(struct device *dev, struc= t device_attribute *attr, u32 val; struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); val =3D init_done(zram); =20 return sysfs_emit(buf, "%u\n", val); @@ -391,7 +391,7 @@ static ssize_t mem_limit_store(struct device *dev, if (buf =3D=3D tmp) /* no chars parsed, invalid input */ return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); zram->limit_pages =3D PAGE_ALIGN(limit) >> PAGE_SHIFT; =20 return len; @@ -409,7 +409,7 @@ static ssize_t mem_used_max_store(struct device *dev, if (err || val !=3D 0) return -EINVAL; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); if (init_done(zram)) { atomic_long_set(&zram->stats.max_used_pages, zs_get_total_pages(zram->mem_pool)); @@ -477,7 +477,7 @@ static ssize_t idle_store(struct device *dev, struct de= vice_attribute *attr, return -EINVAL; } =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); if (!init_done(zram)) return -EINVAL; =20 @@ -539,7 +539,7 @@ static ssize_t bd_stat_show(struct device *dev, struct = device_attribute *attr, struct zram *zram =3D dev_to_zram(dev); ssize_t ret; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); ret =3D sysfs_emit(buf, "%8llu %8llu %8llu\n", FOUR_K((u64)atomic64_read(&zram->stats.bd_count)), @@ -559,7 +559,7 @@ static ssize_t writeback_compressed_store(struct device= *dev, if (kstrtobool(buf, &val)) return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (init_done(zram)) { return -EBUSY; } @@ -576,7 +576,7 @@ static ssize_t writeback_compressed_show(struct device = *dev, bool val; struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); val =3D zram->wb_compressed; =20 return sysfs_emit(buf, "%d\n", val); @@ -592,7 +592,7 @@ static ssize_t writeback_limit_enable_store(struct devi= ce *dev, if (kstrtoull(buf, 10, &val)) return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); zram->wb_limit_enable =3D val; =20 return len; @@ -605,7 +605,7 @@ static ssize_t writeback_limit_enable_show(struct devic= e *dev, bool val; struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); val =3D zram->wb_limit_enable; =20 return sysfs_emit(buf, "%d\n", val); @@ -631,7 +631,7 @@ static ssize_t writeback_limit_store(struct device *dev, */ val =3D rounddown(val, PAGE_SIZE / 4096); =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); zram->bd_wb_limit =3D val; =20 return len; @@ -643,7 +643,7 @@ static ssize_t writeback_limit_show(struct device *dev, u64 val; struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); val =3D zram->bd_wb_limit; =20 return sysfs_emit(buf, "%llu\n", val); @@ -662,7 +662,7 @@ static ssize_t writeback_batch_size_store(struct device= *dev, if (!val) return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); zram->wb_batch_size =3D val; =20 return len; @@ -675,7 +675,7 @@ static ssize_t writeback_batch_size_show(struct device = *dev, u32 val; struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); val =3D zram->wb_batch_size; =20 return sysfs_emit(buf, "%u\n", val); @@ -703,7 +703,7 @@ static ssize_t backing_dev_show(struct device *dev, char *p; ssize_t ret; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); file =3D zram->backing_dev; if (!file) { memcpy(buf, "none\n", 5); @@ -737,7 +737,7 @@ static ssize_t backing_dev_store(struct device *dev, if (!file_name) return -ENOMEM; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (init_done(zram)) { pr_info("Can't setup backing device for initialized device\n"); err =3D -EBUSY; @@ -901,7 +901,7 @@ static struct zram_wb_ctl *init_wb_ctl(struct zram *zra= m) =20 static void zram_account_writeback_rollback(struct zram *zram) { - lockdep_assert_held_write(&zram->init_lock); + lockdep_assert_held_write(&zram->dev_lock); =20 if (zram->wb_limit_enable) zram->bd_wb_limit +=3D 1UL << (PAGE_SHIFT - 12); @@ -909,7 +909,7 @@ static void zram_account_writeback_rollback(struct zram= *zram) =20 static void zram_account_writeback_submit(struct zram *zram) { - lockdep_assert_held_write(&zram->init_lock); + lockdep_assert_held_write(&zram->dev_lock); =20 if (zram->wb_limit_enable && zram->bd_wb_limit > 0) zram->bd_wb_limit -=3D 1UL << (PAGE_SHIFT - 12); @@ -1263,7 +1263,7 @@ static ssize_t writeback_store(struct device *dev, ssize_t ret =3D len; int err, mode =3D 0; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (!init_done(zram)) return -EINVAL; =20 @@ -1566,7 +1566,7 @@ static ssize_t read_block_state(struct file *file, ch= ar __user *buf, if (!kbuf) return -ENOMEM; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); if (!init_done(zram)) { kvfree(kbuf); return -EINVAL; @@ -1667,7 +1667,7 @@ static int __comp_algorithm_store(struct zram *zram, = u32 prio, const char *buf) return -EINVAL; } =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (init_done(zram)) { kfree(compressor); pr_info("Can't change algorithm for initialized device\n"); @@ -1795,7 +1795,7 @@ static ssize_t comp_algorithm_show(struct device *dev, struct zram *zram =3D dev_to_zram(dev); ssize_t sz; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); sz =3D zcomp_available_show(zram->comp_algs[ZRAM_PRIMARY_COMP], buf, 0); return sz; } @@ -1821,7 +1821,7 @@ static ssize_t recomp_algorithm_show(struct device *d= ev, ssize_t sz =3D 0; u32 prio; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); for (prio =3D ZRAM_SECONDARY_COMP; prio < ZRAM_MAX_COMPS; prio++) { if (!zram->comp_algs[prio]) continue; @@ -1879,7 +1879,7 @@ static ssize_t compact_store(struct device *dev, stru= ct device_attribute *attr, { struct zram *zram =3D dev_to_zram(dev); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); if (!init_done(zram)) return -EINVAL; =20 @@ -1894,7 +1894,7 @@ static ssize_t io_stat_show(struct device *dev, struc= t device_attribute *attr, struct zram *zram =3D dev_to_zram(dev); ssize_t ret; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); ret =3D sysfs_emit(buf, "%8llu %8llu 0 %8llu\n", (u64)atomic64_read(&zram->stats.failed_reads), @@ -1915,7 +1915,7 @@ static ssize_t mm_stat_show(struct device *dev, struc= t device_attribute *attr, =20 memset(&pool_stats, 0x00, sizeof(struct zs_pool_stats)); =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); if (init_done(zram)) { mem_used =3D zs_get_total_pages(zram->mem_pool); zs_pool_stats(zram->mem_pool, &pool_stats); @@ -1946,7 +1946,7 @@ static ssize_t debug_stat_show(struct device *dev, struct zram *zram =3D dev_to_zram(dev); ssize_t ret; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_read)(&zram->dev_lock); ret =3D sysfs_emit(buf, "version: %d\n0 %8llu\n", version, @@ -2612,7 +2612,7 @@ static ssize_t recompress_store(struct device *dev, if (threshold >=3D huge_class_size) return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (!init_done(zram)) return -EINVAL; =20 @@ -2864,7 +2864,7 @@ static void zram_destroy_comps(struct zram *zram) =20 static void zram_reset_device(struct zram *zram) { - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); =20 zram->limit_pages =3D 0; =20 @@ -2894,7 +2894,7 @@ static ssize_t disksize_store(struct device *dev, str= uct device_attribute *attr, if (!disksize) return -EINVAL; =20 - guard(rwsem_write)(&zram->init_lock); + guard(rwsem_write)(&zram->dev_lock); if (init_done(zram)) { pr_info("Cannot change disksize for initialized device\n"); return -EBUSY; @@ -3089,7 +3089,7 @@ static int zram_add(void) goto out_free_dev; device_id =3D ret; =20 - init_rwsem(&zram->init_lock); + init_rwsem(&zram->dev_lock); #ifdef CONFIG_ZRAM_WRITEBACK zram->wb_batch_size =3D 32; zram->wb_compressed =3D false; diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index 469a3dab44ad..515a72d9c06f 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -111,8 +111,8 @@ struct zram { struct zcomp *comps[ZRAM_MAX_COMPS]; struct zcomp_params params[ZRAM_MAX_COMPS]; struct gendisk *disk; - /* Prevent concurrent execution of device init */ - struct rw_semaphore init_lock; + /* Locks the device either in exclusive or in shared mode */ + struct rw_semaphore dev_lock; /* * the number of pages zram can consume for storing compressed data */ --=20 2.52.0.457.g6b5491de43-goog