From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 A43B21AAE28 for ; Wed, 6 May 2026 01:07:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778029645; cv=none; b=iCJhK5PCs7d4O+DYVPJOelujg15vgu3m4WzyYSeewCTRmjJzrBiYJ7sQ/tLrRYvcVs4nuQxcFI+U+k9YIZghobgSxPHnWzdYw/kiZDUl9KB30WSvtbjMNNN+CN6dT9FEXEuyaNVmC/PUdbt/fnWkxOj7omLtMH0frS2+NtkW+IM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778029645; c=relaxed/simple; bh=eYN9FeBCcAlKpQFIrlfHLLVVIAcc1lAEgp+s1yK1W4U=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=Dg7W5KQNiYmmeBxAIZC0bZ/Yg6jP9lvn711sjyVmDwa+fL/YDHg0X1+mhVDEszgU56TNagd8ZNzGGbwnfhrV1bkZvLizaukuyhH6bbvDoBeKSznCP/eoVLCOdCZOnpcGGXBonYT+Nx8Yi9K4qmNavN36SFWVXG57EXhipPCt2Ps= 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=njlttXE7; arc=none smtp.client-ip=209.85.210.173 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="njlttXE7" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-82fbdd60b64so4222435b3a.3 for ; Tue, 05 May 2026 18:07:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778029644; x=1778634444; 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=JmQJ/jxjLCff+AyiCXjjhkQKUDK/bWKghKi+SOGgMdQ=; b=njlttXE7C6dFc/ECwxBmgkzwt46W3edg45pVJHX1fu1c88uhsEI6Np4R3cllbD+5KS SHketiGC1MC/54il8PAzqnY23kK84UlgU8hGiUK7BAr3lLSLV5NbeWYDYaxvAwdKy8hL lLSuIkeR2Qf1yFIcuhWMLj3bUSMsTG0l4+/E1Wgx67cmNA78OlduX8dO6jqFdjVLkm3d ETzX/EGCYonS3r+F9c43FjTgq/w3KVNyOI2CbgnKF+f5z15c+F+IzL5dYqz7vNqLN77P QANPIuLPQoL5qeptkpzpQhRJfZJXkvFnlnR4woz6DZup161NqGm4zOhJ/YrW10fqPGqi QL+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778029644; x=1778634444; 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=JmQJ/jxjLCff+AyiCXjjhkQKUDK/bWKghKi+SOGgMdQ=; b=i+qKJyK1U1A4E4ycUS9W1frcxSYtZopL/hY2p2qZCKF4lwEtrpNPtVmdJzupvkS0gg n+E/Z/K2CCBjkg8y76wtwlfK3g31cyv8j2g3oRV4vu/GAizsFqOfuRnf9gk2xnjofQEn kSzXRjb/T45aqTsvramgnnkTa4YXSqVqcanWjYfb7lmx2/2A8juhwNsPyiGjq2P2LWy1 p4qQY/Bi3HFcPXeyZ+LG7qj5Px6zxizCLjN8IHDaBBbv++Ndqfen6lAlXUmnOejwx1NK F82TdGu9txlx7zjmyCXLzUpEkGaGMX7IYOx3vNgq9NnGKt56EnxYQk8puSfHYF0GLPw8 1paQ== X-Forwarded-Encrypted: i=1; AFNElJ+hGWWgAjRu3hSW46Oy4rI2TXYRJTc6xVtAEEwg6oG+uvB4khgo3FSK8cwbpK+tWX7eeYSmhHBtEjxIkuk=@vger.kernel.org X-Gm-Message-State: AOJu0YxbeyuaW3x33PrgJ+ZDWzpbpXgn6lFxORiNamw/UmYNppiNimJE YoJjrjbLd+c8TzQKlJHrkPNWd3cHzxUO7BmoGMzMcER1BpsiDOAGuGTi X-Gm-Gg: AeBDietzLMCnXvMbDtwjzq/gj1muAFuOKyj6VXsevDUQj2uiulNzsg2jY+dHQ1AHz1o /0/LoX3e0e/p9r3clrqvOkErKrgsODHZGIYGlKrMVF4lVA6eX8s93Offa6hgKKsYc5EfJcCL/S7 e2vMRVPCGNk4NozZl3RTiyi1bkbjyomfhuBIa63bzN4pqg5+POna1iVaHxnhvo+0G1SxWIkVMY1 dWwOFj2kyQnzvD3z2MST87BF71Q+TvUFwxwtaYM9qZ74lLdakxGRaXq1W2rnUJ8RSHqNv87ef+/ uy5uIPn+9UHiL9Kjh8Jn5isc8wweQJlYxCd+QblI7v/7ILjq+tA2c9m7Zu7Icb2SUw9R12YHXP6 gUK88p55fNrWqfLLXRYnwrX2qYI6RZbOYGY1nrcd9jD0E1tr5I+LAAxiy1SoUmULqeP01M7ZNv6 sr3JnwuJ/tjIEDkX2hmcX/a/DSZ4lg X-Received: by 2002:a05:6a00:1819:b0:82c:9e00:f958 with SMTP id d2e1a72fcca58-83a58924f3cmr1177827b3a.0.1778029643897; Tue, 05 May 2026 18:07:23 -0700 (PDT) Received: from localhost ([111.228.63.84]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f381sm4539103b3a.6.2026.05.05.18.07.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 18:07:23 -0700 (PDT) From: Cen Zhang To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, baijiaju1990@gmail.com, Cen Zhang Subject: [PATCH] f2fs: annotate lockless last_time[] accesses Date: Wed, 6 May 2026 09:07:09 +0800 Message-Id: <20260506010709.3287111-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: 8bit f2fs stores mount-wide activity timestamps in sbi->last_time[] and samples them from background discard, GC, and balance paths without a dedicated lock. The timestamps are used as best-effort heuristics to decide whether background work should run now or sleep a bit longer. The current helpers use plain loads and stores, so KCSAN can report races between frequent foreground updates and background readers. Exact freshness is not required here, but the intentional lockless accesses should be marked explicitly. Use WRITE_ONCE() in f2fs_update_time() and READ_ONCE() in f2fs_time_over() and f2fs_time_to_wait(). This preserves the existing heuristic behavior and avoids adding locking to hot paths. Signed-off-by: Cen Zhang --- fs/f2fs/f2fs.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 65c0d20df3a4..f838acc2f7a0 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -2121,12 +2121,12 @@ static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type) { unsigned long now = jiffies; - sbi->last_time[type] = now; + WRITE_ONCE(sbi->last_time[type], now); /* DISCARD_TIME and GC_TIME are based on REQ_TIME */ if (type == REQ_TIME) { - sbi->last_time[DISCARD_TIME] = now; - sbi->last_time[GC_TIME] = now; + WRITE_ONCE(sbi->last_time[DISCARD_TIME], now); + WRITE_ONCE(sbi->last_time[GC_TIME], now); } } @@ -2134,7 +2134,7 @@ static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type) { unsigned long interval = sbi->interval_time[type] * HZ; - return time_after(jiffies, sbi->last_time[type] + interval); + return time_after(jiffies, READ_ONCE(sbi->last_time[type]) + interval); } static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi, @@ -2144,7 +2144,7 @@ static inline unsigned int f2fs_time_to_wait(struct f2fs_sb_info *sbi, unsigned int wait_ms = 0; long delta; - delta = (sbi->last_time[type] + interval) - jiffies; + delta = (READ_ONCE(sbi->last_time[type]) + interval) - jiffies; if (delta > 0) wait_ms = jiffies_to_msecs(delta); -- 2.43.0