From nobody Mon Feb 9 02:42:23 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 492F8212552 for ; Tue, 16 Dec 2025 06:22:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765866167; cv=none; b=Q5ZrLvu8MBLtcZltAmc4HLqEZmJosj7YKLAKtOYrSqFwzuQoY6OYAuifXRtstzJtdytn7bUHCKO0wf99RSlGxdqfpPRnekbXequtSR7v8e5VNvc1beFeoFEXQSqi3z2x3zy7tliD6XbkemV2265UfA6z0wEr0jt74mgS8EBkwj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765866167; c=relaxed/simple; bh=qmw9ImX/YTRWXCWXUJbm1ljcraMbyNZu371+0OyW1eA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=AnoFIYtpycN11OninSMDlUy9bpGaZNeZilU8WAAKwnMiXlz0HWiezEibV+59qM9oZMbYTv5BQ1Dcj/pUFiXFrsd15Y/5bZom6ycq8L1bk8DovYEzNblTXM4AVPwKAB0QegOUqbQMZ7kjnMQx2JAr+6XN3V7jcfEfux1hI5TWXSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=fail smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=G2n6Yk6o; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=fail 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="G2n6Yk6o" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-34c21417781so3383767a91.3 for ; Mon, 15 Dec 2025 22:22:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1765866157; x=1766470957; 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=zu/aPcKxXc3G/+SG7emrL7RZpvxEzm7psqqNr+dNYaY=; b=G2n6Yk6oxfCa8gVCQpp9vKS9A5TCgl7RNdD9VYW7xf5Cs2sAHYzKHpVoZ9vGTdXIIJ oYfuPLiuJwG6ZLlZLYyjqIl47INnwxUI4DyAKu5Fwf8TvywURcUffMa3qf9kpzWK0Idk W6JDkF+vFwLhZAevaloPJAmZIfwubSL0Luq5I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765866157; x=1766470957; 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=zu/aPcKxXc3G/+SG7emrL7RZpvxEzm7psqqNr+dNYaY=; b=hh54QmAHxCwr/KTEEOnQZdkwg1swr5aWJgb4JcNM+mzzWvUvJtvgIJnc7rfSXCPWBX ztl+AheQGi+y/KttnwUqCaigoM7Gcl4xteDnRGcuPLGgNj3D8mV/BSxGGSsKzS77cotP 6OuFHYggKAfn8f+zSGD4pDCwopbhiJBsUIAZJryHxbLaKKa35R+xev4wCKQgf7ugv3kC 70K2qCBMV+hIzzlcgmHqIcmaJw8iia3LelFqPKnmV3dylYeBDmm59Dl4FgI+dfPyC1VI 7m/gJvTanRNq0Uc/JoIhtssC0LE38fPXl6MaFdPUxZ7N0j3CE6SYptOxJf6jLoKb6W3W sTLQ== X-Forwarded-Encrypted: i=1; AJvYcCUsjX5f0/fUBG/CdcRj8ARZPZ1pI6ImshDP9HAoem94mBcqh44EJ4mrhsHcldEMdGuGV2TyN5rFiBCJDKo=@vger.kernel.org X-Gm-Message-State: AOJu0YyVNhxndAypXeIKKLZc/RwSN4zGzmWb/e10BSDaj9DCgXMznsey PdWJYuKA/9hkeEAj8HxHHzSegP7tliik/t27HgRX2cg9fbIz+XR4VKhHz/fytWTHxQ== X-Gm-Gg: AY/fxX5HwQEJPQ+LDU+QLc0EssW8QBBzRUPkq8/hR9PvSeyd3XL9AO69x+OKTeIAED+ uRjx0N+Vs3GMo61AWbrx7UX7oesRUATwB4RaGW7VwIMtO/94i9JwNDionDsEjlDl1T+qT8DP+JD c49xSWZF/f+HW/DEVNV3E5spid8Qb/fkOoBjkZUuSg3NPp+7S+2xzQc7K9mE78oiIyG550lp5ul /6u4qh1JAXx8gMKy4VfUmcD0+iqT+hKYFD5wL+G0EcxfY6Pt1YxHQFVxkQnpbRMil3xJazYL9C3 pfJkn+mEIlThyNp0MIUp6E6c/SWnT8g0RW1icGvCap+5pvhcQWpzFkjd5YvoTNkDzD+N/nNFwK9 naSx2bhy1RHAx8kSnjpPXtNeFkoxUqNteatg89S1vVl2TVMRahkFKKvwZIwZv3wqMSnuFEIn2f1 XhMcD5V3MIQJS96tEOxquvomccQrGggqQD9JAVP4jXIhlyfkedJ6lFvqzRjBlZakDYxFOidILtB w== X-Google-Smtp-Source: AGHT+IGJrR7OtPtBhGm+9cDWg3KKBC6FnmouGC8vC5VDtsqiXV8EEGO4Aj1PKtsQ0CNxkvAqtSYZ9g== X-Received: by 2002:a17:90b:180c:b0:340:ec6f:5ac5 with SMTP id 98e67ed59e1d1-34abd6c0312mr9010865a91.2.1765866157264; Mon, 15 Dec 2025 22:22:37 -0800 (PST) Received: from tigerii.tok.corp.google.com ([2a00:79e0:2031:6:a48f:6b66:399d:86cc]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-34abe3dea94sm11038126a91.11.2025.12.15.22.22.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Dec 2025 22:22:36 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , Brian Geffon , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, Sergey Senozhatsky , Greg Kroah-Hartman Subject: [PATCH] zram: drop pp_in_progress Date: Tue, 16 Dec 2025 15:22:23 +0900 Message-ID: <20251216062223.647520-1-senozhatsky@chromium.org> X-Mailer: git-send-email 2.52.0.239.gd5f0c6e74e-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" pp_in_progress makes sure that only one post-processing (writeback or recomrpession) is active at any given time. Functionality wise it, basically, shadows zram init_lock, when init_lock is acquired in writer mode. Switch recompress_store() and writeback_store() to take zram init_lock in writer mode, like all store() sysfs handlers should do, so that we can drop pp_in_progress. Recompression and writeback can be somewhat slow, so holding init_lock in writer mode can block zram attrs reads, but in reality the only zram attrs reads that take place are mm_stat reads, and usually it's the same process that reads mm_stat and does recompression or writeback. Suggested-by: Greg Kroah-Hartman Signed-off-by: Sergey Senozhatsky Reviewed-by: Brian Geffon --- drivers/block/zram/zram_drv.c | 28 ++++++---------------------- drivers/block/zram/zram_drv.h | 1 - 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 634848f45e9b..47826d8ed376 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1264,24 +1264,16 @@ static ssize_t writeback_store(struct device *dev, ssize_t ret =3D len; int err, mode =3D 0; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_write)(&zram->init_lock); if (!init_done(zram)) return -EINVAL; =20 - /* Do not permit concurrent post-processing actions. */ - if (atomic_xchg(&zram->pp_in_progress, 1)) - return -EAGAIN; - - if (!zram->backing_dev) { - ret =3D -ENODEV; - goto out; - } + if (!zram->backing_dev) + return -ENODEV; =20 pp_ctl =3D init_pp_ctl(); - if (!pp_ctl) { - ret =3D -ENOMEM; - goto out; - } + if (!pp_ctl) + return -ENOMEM; =20 wb_ctl =3D init_wb_ctl(zram); if (!wb_ctl) { @@ -1358,7 +1350,6 @@ static ssize_t writeback_store(struct device *dev, out: release_pp_ctl(zram, pp_ctl); release_wb_ctl(wb_ctl); - atomic_set(&zram->pp_in_progress, 0); =20 return ret; } @@ -2622,14 +2613,10 @@ static ssize_t recompress_store(struct device *dev, if (threshold >=3D huge_class_size) return -EINVAL; =20 - guard(rwsem_read)(&zram->init_lock); + guard(rwsem_write)(&zram->init_lock); if (!init_done(zram)) return -EINVAL; =20 - /* Do not permit concurrent post-processing actions. */ - if (atomic_xchg(&zram->pp_in_progress, 1)) - return -EAGAIN; - if (algo) { bool found =3D false; =20 @@ -2700,7 +2687,6 @@ static ssize_t recompress_store(struct device *dev, if (page) __free_page(page); release_pp_ctl(zram, ctl); - atomic_set(&zram->pp_in_progress, 0); return ret; } #endif @@ -2891,7 +2877,6 @@ static void zram_reset_device(struct zram *zram) zram->disksize =3D 0; zram_destroy_comps(zram); memset(&zram->stats, 0, sizeof(zram->stats)); - atomic_set(&zram->pp_in_progress, 0); reset_bdev(zram); =20 comp_algorithm_set(zram, ZRAM_PRIMARY_COMP, default_compressor); @@ -3127,7 +3112,6 @@ static int zram_add(void) zram->disk->fops =3D &zram_devops; zram->disk->private_data =3D zram; snprintf(zram->disk->disk_name, 16, "zram%d", device_id); - atomic_set(&zram->pp_in_progress, 0); zram_comp_params_reset(zram); comp_algorithm_set(zram, ZRAM_PRIMARY_COMP, default_compressor); =20 diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index 48d6861c6647..469a3dab44ad 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -143,6 +143,5 @@ struct zram { #ifdef CONFIG_ZRAM_MEMORY_TRACKING struct dentry *debugfs_dir; #endif - atomic_t pp_in_progress; }; #endif --=20 2.52.0.239.gd5f0c6e74e-goog