From nobody Thu Apr 9 12:49:57 2026 Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) (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 58DC922759C for ; Mon, 9 Mar 2026 10:37:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773052665; cv=none; b=u6WPbhUKi61vbp9sElPp+kgYYmpZJUXEnNpyUEgr+XRPUTVpazrXD+n73zbHWsKuIXoiO1+OPlg/2f71CWAdj6VZBmt7PvY1JTI5mmP2QN8ysQM2k9fvfHZZjfthSnPjlaQC5xFYQ2fPfp+2abVsR0zqj3AlkeNsEE+N3uGqGUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773052665; c=relaxed/simple; bh=TripupM9s+k8BLa2yEfptDjAbsH+UDWd3+a03oWoFvM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UIdBEjg7qMrAMxVaWbBAc1p2GyOgBrmwEpm5ZE/XmxWCuJ3PxVGuBqcGBG/NvenL3ucCNHIsDKE0g/1yNCJqc/PyISYx/Ke1uf3GvsWX1p7gWUU8DoauxfCO80cH74Te5r5P6hX21LHbJGzDufwGcTUchy7CGx8trnR6rzXB6ng= 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=Cn/ZBUW4; arc=none smtp.client-ip=209.85.210.51 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="Cn/ZBUW4" Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-7d74dbfe84cso391304a34.1 for ; Mon, 09 Mar 2026 03:37:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773052663; x=1773657463; 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=dBuOUGVLEw4nznHpBENauX1eomvy7I2QzIe17Bzs21Q=; b=Cn/ZBUW4P5grkR5w5C9hLx6Wqivu1fdEk4XS5Q7tpIwsHeITxJX9MnmHrBbqG+oFk8 eC1CJZzdOl7BydiMlgQMhbAUcNKMbxPmUuXSMwatDzxGSS9aacq2aUObS3EI7NVDOiSN VxD7Oi31wUjempMoEL5SeuBJzqHSIDSaS15ebpw9PJmT/gX5Nt8mEEcL8xqcCjTBo/ge IrwS0hitlRl5SaBp1924FqGP7Od+2hxFL+kDt+bhzwv454/IKyDcK3FDnExw4mUO6nIo +bo6L+IP3a2Zav8MWYChFrHzE0/WWUbMpCCbnzzMJYuBaIJiDezVXLwYBi2LNLNtNVP4 jJaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773052663; x=1773657463; 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=dBuOUGVLEw4nznHpBENauX1eomvy7I2QzIe17Bzs21Q=; b=ShxkQr9S69ybazrQBvu23ED+vK0dQJKOvNpDT+bFAwVtt1c9B1NNipYU6qJnShn1QE Lbj7553Ki8k6B7bGrAknVnnqCDVw6dfvDJ/lcoN83Gb1M2MPqn8605/b/MNrh5+417dX q+6lajE8AhBaN5IJHPnJiNk0oETDwrTSmPwod3geqKaI7xQbv51f2b4PsHUXgNgUihjP WWH5p7aB4QOYDMDHJ06o/80ZV9v4ie9F3a7fLprYqEgBkaet3UvqdoisV6Zjnc6GrGst hjn0w8Kn0O3rqrqHBf9qJkkavOEKgKEFFDQXCBxBfmtwIwOsfrtZzCXEFo4ho7LINBbj pTiw== X-Forwarded-Encrypted: i=1; AJvYcCW/3t/gLR5L5O4fki0IF1rTXHF/iK+J/u2j9Y17Jvt+2rQWUlf2dpACgdI0ffLDkm5sCOV6G6hq15voB1w=@vger.kernel.org X-Gm-Message-State: AOJu0YzV02BQIS+gnC3ASbKgf1biW/9GP10XEleDmdmNTWqD6w2ouSig fQPkt6/gBcxo/DIj02P4xwQ8hLuLoEev5bHFVE0FCcZ0n+TNIJQtamKh X-Gm-Gg: ATEYQzyqTtyF5prgUjRw8IdgZp1LkEfQu6GKGBTBnh2Pt07YAYM4uIjYL+pnegOzdyo dVrtDwevB7qu+ptJTCy93pdJO5ScPGtJacbTRUyrZrMZ/dE5NBkN+MD7wrZvqs1u2bTy5kOdI2z ZFUDfy40TCWSbpwI6dovudrofhTZI+B+2bGTOsbF4kI+OoUBw4mWQm4UrWa0EdH7evc/8TTWhid 2lRkkdMkmvq1yqbuPieQhrw+IXeFXdj4hrdcCYXoCaJQCF13Zjw3zPxGui92gFX97GWA+WzN1KR r7VUZQifP3uFcKU452Beoj8r4XwnwasFn8WuSDLJf2aPA9d9vnqxIE2hmmvxzUGd9AzDGooDv8s kRsKAOfAzuiF0E3RkG1xpxlFkN+959iMdRCm8q2UlQSdMAu8UC/5cWPDhG5j3yqpVY40ol5clY/ bec17a78upAyw63WwUKDxNOz1htrMH8sddC1yWXmiTQdaUaFsJczo= X-Received: by 2002:a05:6830:828e:b0:7d7:45ff:dcfd with SMTP id 46e09a7af769-7d745ffe497mr2836864a34.12.1773052663327; Mon, 09 Mar 2026 03:37:43 -0700 (PDT) Received: from starman.tricat-industries.com ([136.49.86.72]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7d755603798sm231247a34.29.2026.03.09.03.37.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 03:37:42 -0700 (PDT) From: 'wallentx To: linux-f2fs-devel@lists.sourceforge.net Cc: jaegeuk@kernel.org, chao@kernel.org, linux-kernel@vger.kernel.org, wallentx Subject: [RFC PATCH 1/3] f2fs: prepare cur_valid_map for safe lockless access Date: Mon, 9 Mar 2026 05:36:58 -0500 Message-ID: <20260309103700.489932-2-william.allentx@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260309103700.489932-1-william.allentx@gmail.com> References: <20260309103700.489932-1-william.allentx@gmail.com> 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" From: wallentx checkpoint validation and segment_bits_seq_show() can read cur_valid_map without taking the segment lock. A following patch will allow zoned LFS segments to switch between shared and private SIT valid maps, so those readers need to tolerate pointer publication safely. Prepare for that by reading cur_valid_map under RCU in the lockless paths and by publishing the initial map pointer with RCU semantics. This is preparatory and does not change the SIT layout or allocation policy yet. Signed-off-by: wallentx --- fs/f2fs/checkpoint.c | 4 +++- fs/f2fs/segment.c | 3 ++- fs/f2fs/sysfs.c | 9 ++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 6dd39b7de11a..7b196d9df0f7 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -354,7 +354,9 @@ static bool __is_bitmap_valid(struct f2fs_sb_info *sbi,= block_t blkaddr, offset =3D GET_BLKOFF_FROM_SEG0(sbi, blkaddr); se =3D get_seg_entry(sbi, segno); =20 - exist =3D f2fs_test_bit(offset, se->cur_valid_map); + rcu_read_lock(); + exist =3D f2fs_test_bit(offset, rcu_dereference(se->cur_valid_map)); + rcu_read_unlock(); =20 /* skip data, if we already have an error in checkpoint. */ if (unlikely(f2fs_cp_error(sbi))) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 23faf6725632..c9cfc8f17698 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -4845,7 +4845,8 @@ static int build_sit_info(struct f2fs_sb_info *sbi) bitmap =3D sit_i->bitmap; =20 for (start =3D 0; start < MAIN_SEGS(sbi); start++) { - sit_i->sentries[start].cur_valid_map =3D bitmap; + rcu_assign_pointer(sit_i->sentries[start].cur_valid_map, + bitmap); bitmap +=3D SIT_VBLOCK_MAP_SIZE; =20 sit_i->sentries[start].ckpt_valid_map =3D bitmap; diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c index 969e06b65b04..9c79f7b63583 100644 --- a/fs/f2fs/sysfs.c +++ b/fs/f2fs/sysfs.c @@ -1782,11 +1782,18 @@ static int __maybe_unused segment_bits_seq_show(str= uct seq_file *seq, =20 for (i =3D 0; i < total_segs; i++) { struct seg_entry *se =3D get_seg_entry(sbi, i); + unsigned char map[SIT_VBLOCK_MAP_SIZE]; =20 seq_printf(seq, "%-10d", i); seq_printf(seq, "%d|%-3u|", se->type, se->valid_blocks); + + rcu_read_lock(); + memcpy(map, rcu_dereference(se->cur_valid_map), + SIT_VBLOCK_MAP_SIZE); + rcu_read_unlock(); + for (j =3D 0; j < SIT_VBLOCK_MAP_SIZE; j++) - seq_printf(seq, " %.2x", se->cur_valid_map[j]); + seq_printf(seq, " %.2x", map[j]); seq_printf(seq, "| %llx", se->mtime); seq_putc(seq, '\n'); } --=20 2.53.0