From nobody Tue Apr 7 04:45:25 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 07AE134E74F for ; Mon, 16 Mar 2026 07:19:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773645576; cv=none; b=JZdwXl2LZIgFsidw6gwys12WwXIj5sziJwRh5VYcpfqRE7zqu4wAM+MeaiQCPCGyerrvQx6tSOmdEZftNGOSYkgMRfiBx8GWAZdGEhrtAbDGXEVHDgtSPRzfMCceDVmR+8pv5Uf/tnl61VhXLcZSmor+MAwof0tpJGFE2QsU2+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773645576; c=relaxed/simple; bh=ifT/OFI/wwTvs5vJ7XJPUGhdfN8qrsEcc5KmLOre/II=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=IJtMwf+1Wi7086rptGW9xVzv37fukMtq6eJV1wHNrVlSkratzEc0NSYnOIpr3L5QqiNKHYD4P98nB0fWypfZ0yT32vlSK9hrhjNc8ln9nkSgF8TSoLoDF6l6OXOF3rKIw4gRodaDLm7ScMT1nhQJNHa8BBw14U1XZoHmlfaQJUg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lR13Hb5V; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lR13Hb5V" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-8297310ce0aso2245666b3a.2 for ; Mon, 16 Mar 2026 00:19:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773645574; x=1774250374; 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=G/CF17KuXHt9nXMCorDfB0DA2bYkMhSpzoOc02mXOOg=; b=lR13Hb5VIDxlKG7+m2dANmUym6d3/JtRmXsww6W/+YNBOEn8+TWfBMe7X71r88S/OD /7wNEPA0NRq7b3tNmKnKTnfP4G1fJoGnGKl/P8S1RJyfTjDXIwCXQftzhi7oY8XmzNyr GS94fsSWOk1YNsv2/3QkAzi/NU4SjQ1IWvaVLdJ6ji2W5c6z7M92Py3D+VGzukPlAnMy mzwB/f/vTFJcLz/iu3Y8lON+a04VVZBlFg6toIbfXWVbT2t/3Qt7zmDAslwHpumfTfwy fHRyJ166KpndlngflpKH+a+Rn2w0rVvYNMzxrFFJ6EFLyqzXfpwl96crWkubbefeD0WS JMTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773645574; x=1774250374; 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=G/CF17KuXHt9nXMCorDfB0DA2bYkMhSpzoOc02mXOOg=; b=XMci5Cg+evtGWkbh3Z97hjjEOJ8apSsL1Si+mYsc5HSeb2VQcpQA5lI2pvELBBA/nr MQNjzmZ5ZjKaD5tAjkNbdLZmaOQlFzqQPapMS9X22ogIqaKRhOZ9a4eKMNAVBvwTc9Ix rwLV0dwFjDfVl2+bj/LJrXgVv+zUIkccw4mGVGA/5gFF5xyMi5B1lUHKumCkYRr8zh/N o+805Xzy8CBAB57yQdXkvQpB1pecxwkW9Rw4Nm6s6UYlLGFvD0Ywrt0jCoqFNL4YU58+ D0xZLSxVmQFlOPWNKZL91hW/luwegV2uyjzEcBLtniSXaU+l6xL96rnRINLnysPMowb+ 30FA== X-Forwarded-Encrypted: i=1; AJvYcCWK45ONB9WzYsHCbC7s4oOMgAO3h83gL2ehiwkJ+tjH6THeaHIfwr+l+s0CvvadC1M2YOURlxSDmdjHFtA=@vger.kernel.org X-Gm-Message-State: AOJu0YypVIcWFD4JZsAF65XhvmtoUzRXhuJgoqwD8vhJ+pdCixkicXuI idCQOBV1WR/KN5wMZYU7qjJh4hwafwx7JM04d92yoXhpsNJFhWL8xQ+Y X-Gm-Gg: ATEYQzzyDKX06yt1wqu2EmixL2BnzSFEQ+/Pi5BEQvtdpqYFoJwX+7vcKsSyBS4ClTJ h3b1nOKnql3rPxtCU99OgJIte8oMoLZxP3DF2kFwDv/KYdWo5bDwOQ2HSJXYki11BaaNROpeZ3/ bQ9tk3iyPanLxDE3AiCC272eKnEHcUOQdFWlH4f7351u2EsjYXJMU1wIdh30TtmfEqoO4bqMwlU K7e4/kQL1BPq83lSJp1oMGqW+yP2WDiTesbotN6x8YHqGmaCbbQnW6Gq/UCzny3ROYNxzXaEEyi 6o6rLYUL7UA6PKQswdjy9wu6xmG/b9slRp+GLYZxgUFoqhgDpAAxah8J1Ujgdj0HBH5QDBi+lsf g4CyNgAIXKqpy8O5GVFbqdQvsj6YKBf4lgiUvXRr4zJ0R4vVFeV82h2pWoowtgP8wRlRPVJAbCZ SPt8C3NuKV/pLuaWRuXzO/GRFf33EM X-Received: by 2002:a05:6a00:3a20:b0:81f:d605:9c9c with SMTP id d2e1a72fcca58-82a196f64a1mr11119653b3a.11.1773645574267; Mon, 16 Mar 2026 00:19:34 -0700 (PDT) Received: from lavm-prs74opxn5.. ([111.228.63.84]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82a0727f2fcsm12565117b3a.28.2026.03.16.00.19.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 00:19:33 -0700 (PDT) From: Cen Zhang To: shaggy@kernel.org Cc: jfs-discussion@lists.sourceforge.net, linux-kernel@vger.kernel.org, baijiaju1990@gmail.com, r33s3n6@gmail.com, gality369@gmail.com, zhenghaoran154@gmail.com, hanguidong02@gmail.com, ziyuzhang201@gmail.com, Cen Zhang Subject: [PATCH] jfs: wrap statistics counters with data_race() Date: Mon, 16 Mar 2026 15:03:03 +0800 Message-Id: <20260316070303.2868076-1-zzzccc427@gmail.com> X-Mailer: git-send-email 2.34.1 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" JFS uses global statistics counters (lmStat, mpStat, xtStat, TxStat) that are incremented from multiple contexts (writeback workqueue, IO kthread, syscall paths) without any lock. The INCREMENT()/DECREMENT()/ HIGHWATERMARK() macros expand to plain C read-modify-write operations: #define INCREMENT(x) ((x)++) These counters are purely informational and only read via /proc for diagnostic purposes. A concurrent lost increment is acceptable for approximate statistics. However, the plain C accesses are formally undefined under LKMM. Wrap the statistics macro definitions with data_race() to document that these races are intentional and benign. Also annotate the proc_show read sides for completeness. Signed-off-by: Cen Zhang --- fs/jfs/jfs_debug.h | 8 ++++---- fs/jfs/jfs_logmgr.c | 10 +++++----- fs/jfs/jfs_metapage.c | 6 +++--- fs/jfs/jfs_txnmgr.c | 18 +++++++++--------- fs/jfs/jfs_xtree.c | 6 +++--- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/fs/jfs/jfs_debug.h b/fs/jfs/jfs_debug.h index 48e2150c092e..d0441116c5c0 100644 --- a/fs/jfs/jfs_debug.h +++ b/fs/jfs/jfs_debug.h @@ -97,13 +97,13 @@ int jfs_txstats_proc_show(struct seq_file *m, void *v); int jfs_mpstat_proc_show(struct seq_file *m, void *v); int jfs_xtstat_proc_show(struct seq_file *m, void *v); =20 -#define INCREMENT(x) ((x)++) -#define DECREMENT(x) ((x)--) -#define HIGHWATERMARK(x,y) ((x) =3D max((x), (y))) +#define INCREMENT(x) (data_race((x)++)) +#define DECREMENT(x) (data_race((x)--)) +#define HIGHWATERMARK(x, y) (data_race((x) =3D max(data_race(x), (y)))) #else #define INCREMENT(x) #define DECREMENT(x) -#define HIGHWATERMARK(x,y) +#define HIGHWATERMARK(x, y) #endif /* CONFIG_JFS_STATISTICS */ =20 #endif /* _H_JFS_DEBUG */ diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index ada00d5bc214..c18311805521 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c @@ -2481,11 +2481,11 @@ int jfs_lmstats_proc_show(struct seq_file *m, void = *v) "writes completed =3D %d\n" "full pages submitted =3D %d\n" "partial pages submitted =3D %d\n", - lmStat.commit, - lmStat.submitted, - lmStat.pagedone, - lmStat.full_page, - lmStat.partial_page); + data_race(lmStat.commit), + data_race(lmStat.submitted), + data_race(lmStat.pagedone), + data_race(lmStat.full_page), + data_race(lmStat.partial_page)); return 0; } #endif /* CONFIG_JFS_STATISTICS */ diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 64c6eaa7f3f2..675f664cbe9d 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -944,9 +944,9 @@ int jfs_mpstat_proc_show(struct seq_file *m, void *v) "page allocations =3D %d\n" "page frees =3D %d\n" "lock waits =3D %d\n", - mpStat.pagealloc, - mpStat.pagefree, - mpStat.lockwait); + data_race(mpStat.pagealloc), + data_race(mpStat.pagefree), + data_race(mpStat.lockwait)); return 0; } #endif diff --git a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c index c16578af3a77..51be07337c7a 100644 --- a/fs/jfs/jfs_txnmgr.c +++ b/fs/jfs/jfs_txnmgr.c @@ -3006,15 +3006,15 @@ int jfs_txstats_proc_show(struct seq_file *m, void = *v) "txBeginAnon blocked by tlocks low =3D %d\n" "calls to txLockAlloc =3D %d\n" "tLockAlloc blocked by no free lock =3D %d\n", - TxStat.txBegin, - TxStat.txBegin_barrier, - TxStat.txBegin_lockslow, - TxStat.txBegin_freetid, - TxStat.txBeginAnon, - TxStat.txBeginAnon_barrier, - TxStat.txBeginAnon_lockslow, - TxStat.txLockAlloc, - TxStat.txLockAlloc_freelock); + data_race(TxStat.txBegin), + data_race(TxStat.txBegin_barrier), + data_race(TxStat.txBegin_lockslow), + data_race(TxStat.txBegin_freetid), + data_race(TxStat.txBeginAnon), + data_race(TxStat.txBeginAnon_barrier), + data_race(TxStat.txBeginAnon_lockslow), + data_race(TxStat.txLockAlloc), + data_race(TxStat.txLockAlloc_freelock)); return 0; } #endif diff --git a/fs/jfs/jfs_xtree.c b/fs/jfs/jfs_xtree.c index 28c3cf960c6f..d786914d98fe 100644 --- a/fs/jfs/jfs_xtree.c +++ b/fs/jfs/jfs_xtree.c @@ -2922,9 +2922,9 @@ int jfs_xtstat_proc_show(struct seq_file *m, void *v) "searches =3D %d\n" "fast searches =3D %d\n" "splits =3D %d\n", - xtStat.search, - xtStat.fastSearch, - xtStat.split); + data_race(xtStat.search), + data_race(xtStat.fastSearch), + data_race(xtStat.split)); return 0; } #endif --=20 2.34.1