From nobody Tue Dec 2 02:06:40 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 1029936CDF1 for ; Thu, 20 Nov 2025 15:22:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763652138; cv=none; b=gAux9XjfunGy70XggMEiilZvkZwFTeYImZlGOYo9gn1QyO249eHppM02Tt1z8oaq7KZcuuyrZdOJAkbovnvTF+Q8AAXSHRSO+TFAoqgRVVg0Fc1lOfSqDpaNKMgJQjuV3Fz1V8okkjc5j+MRRVUsu6YsfAmLOjSlesPR/SSG6Cs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763652138; c=relaxed/simple; bh=PRNpmIyzIQt6oDSuT13eKGI1o2cKI4pCtHaFoUAiu9s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EiAAfm9lSWtVnaHqJZzACnldFLAfSRpMEnWOHJLb4wHFMpEfd2xQnF0zmosUDhqWwACiX8HHx9c1COHZ3y62mE25xEVn9yvgwmTQ3ts+RKLDaBisMHNnFEF6YYxiSC/o7pViD49pg+D3NY9a0keKrFADdl8UnBN09UpKs0vg/Pk= 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=CGd4azZR; arc=none smtp.client-ip=209.85.210.175 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="CGd4azZR" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-7b89c1ce9easo1158278b3a.2 for ; Thu, 20 Nov 2025 07:22:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763652136; x=1764256936; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7bqQNyl0EBA1tCBIt5a+Z0GgRe/Buq+cexkkYbJh4q8=; b=CGd4azZRvFKin1+X23aed5sdzldklguJzf4PHguUpnbYmw2mPluv5pJvJrXEwPV1cN i+bHR1GTUDckO0iAf+VFpPO9l6n4ARbygxgot4IHTpbZkOPIRSh1oJ2p2HYX4xnezIht 6753luCxzOzQLdGDOBIjSXJyxFdYzjx4OSzo4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763652136; x=1764256936; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7bqQNyl0EBA1tCBIt5a+Z0GgRe/Buq+cexkkYbJh4q8=; b=nWpLNVspw++cLG8qAcA5Uo/Db7QOly+1cs/qXKSOjt3eJsEhF/F40qSnql/H4IGwGI vEIRMU+1fDetSv5ej/Mi384rbYjMWnk+/Txzu0gbP8fMKcKMRnlid/+Ikp3WNvTPCfa2 ZII68fXm3XlbJ1qdAzru9G+pdApY89gkJYBLE0r+QayybOvsMA6Ebh/iIOn4CkBI3tRB M59dLGfYfl8RTV6ElX4gOaha6xR1M0h8oZv3aDqKLoCJASP/Pj5IHZ4fdf3+3ZWA/yxu FVJQmaE2RihKHJRUM7qeCAOlZX/GBz4XWfK8yfsFcUVOmT4A59TzGLbfst7MjqN63Nur IaOQ== X-Forwarded-Encrypted: i=1; AJvYcCWulaaUwP+nck0uOVXbLNnr81pu68LN+ZBLTRQDChM2lCKex/IWt/iuiVz1OSllLBw+4wj9Lu9my4GNSqw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+4/W6FgGJZaiBiO++eslUk2u6yAHQLmjMsY5rr2M1tAfkIV60 CO8/HClCaimnJooYGA8H7RPEVGieH8MWgV1P6+2kl9GNusVTxqjBlEjaoAcidjhcXg== X-Gm-Gg: ASbGncvYrnUkvybjYsOIidkajzEf1Usip3TIm0fGjV8KCBK3QbrpXooPmh+hEhSAYiF V/efTmsU9/YGnDGuIPEJVKnwQxNtbEGhGtdusEilNH2Wrs2+lpzH1j5BAkNjciSj+8mFGxNlPPP ZeCLu1oaHdHBDZWrzUEBETWeDjtEGmh/HCS8ToNz3PkA62UMTTpxVA6wIyNkVzHCUjRB02gQuaw jb94GxelcEvvdGR5Bp4InMNE4nlP/qFgp2zQw/utkzDOVAHHH20ielN1s5j0EUid30zLwHokbVy 1oXl9l0hBdPOOmSNDv8+XkG0jUYGsJgWnSxlh1H5rE2F4FnU/xssX3dwnvxA1uWLOUTmPeAhvk3 CX8YjIqq3uHcd9y6sa0jZ7ZKY9xq37yPp6Y5V30EI5qkzG/rHVaJ3AUEZ6KCEtGrSW+sFisHSF3 /Il0+8WgZU4v65h5VSxghTqxH7nfoLukzAh9k9ErnFas64cyfb X-Google-Smtp-Source: AGHT+IE03gD53APBfw1EXEVlOEjEP8sWWJxhTauo8qfdCA6G5JLbr6CU65y8SGc2126/gbRkzxoUKg== X-Received: by 2002:a05:6a00:23c3:b0:7aa:d7dd:b7dc with SMTP id d2e1a72fcca58-7c3f0b62fe1mr4912657b3a.31.1763652136376; Thu, 20 Nov 2025 07:22:16 -0800 (PST) Received: from tigerii.tok.corp.google.com ([2401:fa00:8f:203:6762:7dba:8487:43a1]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7c3f023f968sm3179642b3a.38.2025.11.20.07.22.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 07:22:16 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton , Minchan Kim , Yuwen Chen , Richard Chang Cc: Brian Geffon , Fengyu Lian , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, Sergey Senozhatsky Subject: [RFC PATCHv5 4/6] zram: drop wb_limit_lock Date: Fri, 21 Nov 2025 00:21:24 +0900 Message-ID: <20251120152126.3126298-5-senozhatsky@chromium.org> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251120152126.3126298-1-senozhatsky@chromium.org> References: <20251120152126.3126298-1-senozhatsky@chromium.org> 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" We don't need wb_limit_lock. Writeback limit setters take an exclusive write zram init_lock, while wb_limit modifications happen only from a single task and under zram read init_lock. No concurrent wb_limit modifications are possible (we permit only one post-processing task at a time). Add lockdep assertions to wb_limit mutators. While at it, fixup coding styles. Signed-off-by: Sergey Senozhatsky Reviewed-by: Brian Geffon --- drivers/block/zram/zram_drv.c | 22 +++++----------------- drivers/block/zram/zram_drv.h | 1 - 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 71f37b960812..671ef2ec9b11 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -530,9 +530,7 @@ static ssize_t writeback_limit_enable_store(struct devi= ce *dev, return ret; =20 down_write(&zram->init_lock); - spin_lock(&zram->wb_limit_lock); zram->wb_limit_enable =3D val; - spin_unlock(&zram->wb_limit_lock); up_write(&zram->init_lock); ret =3D len; =20 @@ -547,9 +545,7 @@ static ssize_t writeback_limit_enable_show(struct devic= e *dev, struct zram *zram =3D dev_to_zram(dev); =20 down_read(&zram->init_lock); - spin_lock(&zram->wb_limit_lock); val =3D zram->wb_limit_enable; - spin_unlock(&zram->wb_limit_lock); up_read(&zram->init_lock); =20 return sysfs_emit(buf, "%d\n", val); @@ -567,9 +563,7 @@ static ssize_t writeback_limit_store(struct device *dev, return ret; =20 down_write(&zram->init_lock); - spin_lock(&zram->wb_limit_lock); zram->bd_wb_limit =3D val; - spin_unlock(&zram->wb_limit_lock); up_write(&zram->init_lock); ret =3D len; =20 @@ -577,15 +571,13 @@ static ssize_t writeback_limit_store(struct device *d= ev, } =20 static ssize_t writeback_limit_show(struct device *dev, - struct device_attribute *attr, char *buf) + struct device_attribute *attr, char *buf) { u64 val; struct zram *zram =3D dev_to_zram(dev); =20 down_read(&zram->init_lock); - spin_lock(&zram->wb_limit_lock); val =3D zram->bd_wb_limit; - spin_unlock(&zram->wb_limit_lock); up_read(&zram->init_lock); =20 return sysfs_emit(buf, "%llu\n", val); @@ -869,18 +861,18 @@ static struct zram_wb_ctl *init_wb_ctl(struct zram *z= ram) =20 static void zram_account_writeback_rollback(struct zram *zram) { - spin_lock(&zram->wb_limit_lock); + lockdep_assert_held_read(&zram->init_lock); + if (zram->wb_limit_enable) zram->bd_wb_limit +=3D 1UL << (PAGE_SHIFT - 12); - spin_unlock(&zram->wb_limit_lock); } =20 static void zram_account_writeback_submit(struct zram *zram) { - spin_lock(&zram->wb_limit_lock); + lockdep_assert_held_read(&zram->init_lock); + if (zram->wb_limit_enable && zram->bd_wb_limit > 0) zram->bd_wb_limit -=3D 1UL << (PAGE_SHIFT - 12); - spin_unlock(&zram->wb_limit_lock); } =20 static int zram_writeback_complete(struct zram *zram, struct zram_wb_req *= req) @@ -1004,13 +996,10 @@ static int zram_writeback_slots(struct zram *zram, u32 index =3D 0; =20 while ((pps =3D select_pp_slot(ctl))) { - spin_lock(&zram->wb_limit_lock); if (zram->wb_limit_enable && !zram->bd_wb_limit) { - spin_unlock(&zram->wb_limit_lock); ret =3D -EIO; break; } - spin_unlock(&zram->wb_limit_lock); =20 while (!req) { req =3D zram_select_idle_req(wb_ctl); @@ -2961,7 +2950,6 @@ static int zram_add(void) init_rwsem(&zram->init_lock); #ifdef CONFIG_ZRAM_WRITEBACK zram->wb_batch_size =3D 32; - spin_lock_init(&zram->wb_limit_lock); #endif =20 /* gendisk structure */ diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index 1a647f42c1a4..c6d94501376c 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -127,7 +127,6 @@ struct zram { bool claim; /* Protected by disk->open_mutex */ #ifdef CONFIG_ZRAM_WRITEBACK struct file *backing_dev; - spinlock_t wb_limit_lock; bool wb_limit_enable; u32 wb_batch_size; u64 bd_wb_limit; --=20 2.52.0.rc1.455.g30608eb744-goog