From nobody Sun May 24 22:33:47 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 45278306B11 for ; Thu, 21 May 2026 01:51:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779328302; cv=none; b=APGoqcCDGLDYP3TuAe35WOWde+Ese8Na/FhAhRvmcTSJi7h/PbEqY16jheCNzKkHboh40wAUXE/GxIVu5LvX3XlmVKbsIprcZDgV4sNbeUlhFx3LhzofKxTcl2QB3C2lRd1tsM8CciGj3wIo3XQppyfVJWPrb0/aNISlPJzKZeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779328302; c=relaxed/simple; bh=4BH+PB16TTAitB65UjfQ+7iVqGkGwXjeAO0+GG+fzWc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=sFdu7/ABxhuFRdfux/R5wl2Xac0C0KHN0HCDFmuSFpT5dB51fd5NQsRLsCd0PC17Rjvm8PbLPChVXBg61SOvqEC3TftzYV3F43JuP93Ej9iP4i9dge0XrOvEFsuw5vglpGvpY4M+kgaLsog6Nikx4DK6KSu2SQHJaddn9tK9ANE= 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=G5QPEGan; arc=none smtp.client-ip=209.85.214.171 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="G5QPEGan" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2b9fcf7c91bso58052105ad.0 for ; Wed, 20 May 2026 18:51:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779328294; x=1779933094; 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=rybzgIgzvHGYiQF9jRUihAcDFOY5JFL5Nz+b/9q97sQ=; b=G5QPEGanVzEy8gXtXjByYP7qv6Q4BQRXL8heGiGH4Edqvb+9A4274JEPEZrzQ8nug0 r13sthIqmB0jRRo1YH5OJ0rFs9w0NK9QfEbhlN/dDPUHJnkqLjECcTa4jjVnrZL+oSEL G/NgIdl9VsB5n6zf5wjBd80VS0YBCtlhvciaaN9KJSXVfQp3Is5uc3d9mu/sM22P0Q2N oJnS1Be87rUGAYdZWXPdEqA0Pqr0lcw0J7X5a7kUpJJ/RfYnD9lB9mjmlV6epqE9zlIq WkGYQll5j0ow3sFM/wEDgaEFOHXIGhd9/a963dAeaZrM0GVDw4qttWyXpTUh+C+0/u3s kshA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779328294; x=1779933094; 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=rybzgIgzvHGYiQF9jRUihAcDFOY5JFL5Nz+b/9q97sQ=; b=m8MyBGnvTBTAFSX7PHT+2RGvoj8UYWgh9YuFjkhHDvJ9b8VwfEb1Aq1w51nMUocF2D AvzgkaRg4GlER0HLST47iTIq8DbUGDxRZHp9GA0jpWnLw+qmjSLNsplYb9eh3IcGrvZR sZxl+56nC8S8YQJmQtMeb5NFxIR2mVva2gDQ1FTIH8sNE4sM2sHC2lMXX88gIbbajuq7 EFAJsjPcaxYhFRZOOpIlVWMHriH+gcAnG6IT4XsUMSfRXEb/mdi8GNrDHBkhni24HEz4 aGpCrD6xaSzTx6immG0IZ5RY3ToWDral6M2NrTkZNW5pgobs1foBJQHIeNV9yLTKqZYS AcNg== X-Forwarded-Encrypted: i=1; AFNElJ/jrlW3/3p/Vq+AdJ+CdOnxwG4T28pJh479KZfzVUNTUh46CS1qejyWOFHrFj5abF+/wWr6CvNnJQ2si90=@vger.kernel.org X-Gm-Message-State: AOJu0YyJ/ctmdjkf3D0JuK6M6O860qzinLRxneuw7AgTaAeMQE/rjXDS 2dcLn8OIq9ZN2//+kjI5WdyAwpVAieePJcIeNJ3NpDFbcc5W7MmpTZDD X-Gm-Gg: Acq92OEGSFuImZrXymCYqEI3jkZCRW4EXZrrZ+2IS2PUt1HPxzwyJoFIkqCbPX5ZY/n zamCF3GVyuKy2IAnT/yYnzF4dLFfcDydBF3K9V3iU2esRr+jFyfjJ52IaZe7GRdpkVx82SHOOMl 8jHLsQAs0BA0zpyhHoAhleSlFB/OSV0+CgTh1rs0mzkof66c8ECOMlq0gc/KfDKI030PauW+dYo lcCq+RMyOCcf2tttTY2ApjvzJRaXxrNIVoKMDvn0gka/HctM7AnSsPuflTW7IKk6OCx5MHzbGpn aNCRYEEvCbsjB0MF6OIu1anrSQP+iWl5DkFfcE+kKxR0CADH/whN2z7B8FJ3YVdIeT0TJlxFRKI 7ZNYbH699RTwZHFFIcrJirolW96dt4TMUMIVWRSASmo+B8e63R5fp9TBNM3//IFPu2Nl+dRRJZ3 CPUVlZjLEHMOS+Xrr2/7CNOM8igBza5iT/wXRCcLY2miq0G8AccfFmmzUYisV+KqIbkOaVZO0rM I1IFgmZ X-Received: by 2002:a17:902:db04:b0:2b9:87e0:1f80 with SMTP id d9443c01a7336-2bea3386598mr5807845ad.24.1779328293659; Wed, 20 May 2026 18:51:33 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bdc4c2cda4sm144600225ad.58.2026.05.20.18.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 18:51:33 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, djwong@kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [PATCH] f2fs: avoid false shutdown fserror reports Date: Thu, 21 May 2026 09:51:26 +0800 Message-ID: <20260521015126.1663277-1-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 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" F2FS records image errors and checkpoint-stop reasons through the same s_error_work worker. The ordinary f2fs_handle_error() path only updates s_errors, but the worker still calls fserror_report_shutdown() unconditionally after committing the superblock. As a result, a metadata corruption report can be followed by a synthetic FAN_FS_ERROR event with ESHUTDOWN and an invalid superblock file handle, even though no stop reason was recorded. Track whether save_stop_reason() actually changed the stop_reason array and only report the shutdown fserror for that case. Pure s_errors updates still commit the superblock, but no longer generate a false shutdown event. Fixes: 50faed607d32 ("f2fs: support to report fserror") Signed-off-by: Wenjie Qi Reviewed-by: Chao Yu --- fs/f2fs/f2fs.h | 1 + fs/f2fs/super.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index f0a54883b88..fffb516b78f 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1990,6 +1990,7 @@ struct f2fs_sb_info { unsigned char stop_reason[MAX_STOP_REASON]; /* stop reason */ spinlock_t error_lock; /* protect errors/stop_reason array */ bool error_dirty; /* errors of sb is dirty */ + bool stop_reason_dirty; /* stop reason of sb is dirty */ =20 /* For reclaimed segs statistics per each GC mode */ unsigned int gc_segment_mode; /* GC state for reclaimed segments */ diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index ada8098f8b3..718feb854b1 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -4616,6 +4616,7 @@ static void save_stop_reason(struct f2fs_sb_info *sbi= , unsigned char reason) spin_lock_irqsave(&sbi->error_lock, flags); if (sbi->stop_reason[reason] < GENMASK(BITS_PER_BYTE - 1, 0)) sbi->stop_reason[reason]++; + sbi->stop_reason_dirty =3D true; spin_unlock_irqrestore(&sbi->error_lock, flags); } =20 @@ -4623,6 +4624,7 @@ static void f2fs_record_stop_reason(struct f2fs_sb_in= fo *sbi) { struct f2fs_super_block *raw_super =3D F2FS_RAW_SUPER(sbi); unsigned long flags; + bool report_shutdown =3D false; int err; =20 f2fs_down_write(&sbi->sb_lock); @@ -4634,6 +4636,10 @@ static void f2fs_record_stop_reason(struct f2fs_sb_i= nfo *sbi) sbi->error_dirty =3D false; } memcpy(raw_super->s_stop_reason, sbi->stop_reason, MAX_STOP_REASON); + if (sbi->stop_reason_dirty) { + report_shutdown =3D true; + sbi->stop_reason_dirty =3D false; + } spin_unlock_irqrestore(&sbi->error_lock, flags); =20 err =3D f2fs_commit_super(sbi, false); @@ -4644,7 +4650,8 @@ static void f2fs_record_stop_reason(struct f2fs_sb_in= fo *sbi) "f2fs_commit_super fails to record stop_reason, err:%d", err); =20 - fserror_report_shutdown(sbi->sb, GFP_NOFS); + if (report_shutdown) + fserror_report_shutdown(sbi->sb, GFP_NOFS); } =20 void f2fs_save_errors(struct f2fs_sb_info *sbi, unsigned char flag) --=20 2.43.0