From nobody Sun Feb 8 06:22:11 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 E72831AF4FE; Wed, 21 Aug 2024 15:46:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255196; cv=none; b=ml7737fOXz1ltuxysXjfBFEj4MBFoYAoPoJXjCeVss2Y9GLQngtuUyJMOzf4MhWt7jvN29/mL7+2GUQQyyCTsahKpCsSXjJEg5tZPl4BVaanqhrX0NjbB8NPV2DJRS4ctfKGeqR0KmOkss9gcBczvnl6J5HRz17kNpnmyz3D9e8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255196; c=relaxed/simple; bh=YEuexXYRq212bkgPvXGZNVwB2SCy8yMz7BKsaigyPJc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ul85alht4uvoIklzbzXq7n4Vws4t7vEgwFq8m0F+C/zSe5s+RNrT9gd0MF/80BMhE8uaPi2MqRLwde+Gz82qawtxnkj8KQoNNnWWJUF/F1vw2C8aJviOuqKRmToBS+Zw6Vjb1itleUvV0FY2vXVQ1zLl5ydGfoYkj691qxaNStY= 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=AmmKOth0; arc=none smtp.client-ip=209.85.216.54 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="AmmKOth0" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2d3dc25b1b5so4207619a91.2; Wed, 21 Aug 2024 08:46:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724255194; x=1724859994; 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=hXEADUMbFCm+qoMwaOJN5HYjEhgKzPiQK8CXPKHHYyI=; b=AmmKOth0RJfd1h6LHG9GxCgHjNgSjZV7oCkf/9jAZ5oML71EHSw3+hH/OCRxoIZ90v Z1U7d1MZsJEyNLVJbNJM10KG4ZNZG5U6NNB5Sc60CRGVl4euo+/9QqXE61aA/z9/uaZg aKoHZ0qLJOylDhwkp9X2SR4evgQYgVme/s7RoCJ8vRDq29GE066l6Vl+KbE/uVuEzBiD eSOvjoe206cqzcVuYxuFyWoTy7BW41XqhIPGKL4G+BgsORCrnsamgQvnpEd82QPrsPt7 0Sw2ZPo0g43T8hMi85toXA8IbnxfaC4bFJewM9kYE6jrS4HZShOtSCY/MUDUzj/ecOhv cpfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724255194; x=1724859994; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hXEADUMbFCm+qoMwaOJN5HYjEhgKzPiQK8CXPKHHYyI=; b=aX055geX4hzv0PTMX7d5cjIkTi8VxOj4eEndmHdZmHdi8KyAimEiipTJPW/uW3skCQ zmt7WsCBf0BF5PaU40U+H39DXx2wbhEEIU+/8qaojZaMKtSOu6iAua1OnLEzillIWPAV Q4hOjoXNheHnqoMxQyk/DvDZODgfg7xkk4qRWbTyVvnoM+7ZrifKcyMA6PcvJrmiztnD alcdJNQ6INpDB6O0LGKfwFDkvdDLW5S82HV55B7hTfGM8hupkAD8nJq6i5Cv1kr0BN1h t+RaFliy9Ptx6nj1oO2buN0CuS89enQhkb0nLrbpXsraOx8qto1AhFK6yrX01WIljd3Q bTDQ== X-Forwarded-Encrypted: i=1; AJvYcCXnucQ5BiehBjlUuEUZ/LFMIu1rFIEST8YEmmXd8r+EDF5uzJ6OZrdD270EJgHLOui0GGa8p7W0dnmOtQc=@vger.kernel.org X-Gm-Message-State: AOJu0YwpFWoMt5YgNDxbQ/7NmVYo5hPWkqp0RksZusPKLRspf0g3wDB/ TsR0qbI+sKmH7pVB17WRvmXrVHYJxsaPt4uG51kk0PMtDaJkkNGSFp3Qrw== X-Google-Smtp-Source: AGHT+IH1eP5l3JdR3XDw6JOrexumfxNYGwcVtFiAYfuAzVE/xFZs2HP7K1FOxeDC/EITPyd5c97qBw== X-Received: by 2002:a17:90a:c16:b0:2c8:5cb7:54e5 with SMTP id 98e67ed59e1d1-2d5e9dcabb1mr2998947a91.32.1724255193998; Wed, 21 Aug 2024 08:46:33 -0700 (PDT) Received: from carrot.. (i222-151-34-139.s42.a014.ap.plala.or.jp. [222.151.34.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eba2e538sm2021098a91.17.2024.08.21.08.46.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 08:46:33 -0700 (PDT) From: Ryusuke Konishi To: Andrew Morton Cc: linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/5] nilfs2: treat missing sufile header block as metadata corruption Date: Thu, 22 Aug 2024 00:46:23 +0900 Message-Id: <20240821154627.11848-2-konishi.ryusuke@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240821154627.11848-1-konishi.ryusuke@gmail.com> References: <20240821154627.11848-1-konishi.ryusuke@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" The sufile, a metadata file that holds metadata for segment management, has statistical information in its first block, but if reading this block fails, it receives the internal code -ENOENT and returns it unchanged to the callers. To prevent this -ENOENT from being propagated to system calls, if reading the header block fails, return -EIO (or -EINVAL depending on the context) instead. Signed-off-by: Ryusuke Konishi --- fs/nilfs2/sufile.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c index 7bfc0860acee..f071eba48163 100644 --- a/fs/nilfs2/sufile.c +++ b/fs/nilfs2/sufile.c @@ -79,10 +79,17 @@ nilfs_sufile_block_get_segment_usage(const struct inode= *sufile, __u64 segnum, NILFS_MDT(sufile)->mi_entry_size; } =20 -static inline int nilfs_sufile_get_header_block(struct inode *sufile, - struct buffer_head **bhp) +static int nilfs_sufile_get_header_block(struct inode *sufile, + struct buffer_head **bhp) { - return nilfs_mdt_get_block(sufile, 0, 0, NULL, bhp); + int err =3D nilfs_mdt_get_block(sufile, 0, 0, NULL, bhp); + + if (unlikely(err =3D=3D -ENOENT)) { + nilfs_error(sufile->i_sb, + "missing header block in segment usage metadata"); + err =3D -EIO; + } + return err; } =20 static inline int @@ -1237,9 +1244,15 @@ int nilfs_sufile_read(struct super_block *sb, size_t= susize, if (err) goto failed; =20 - err =3D nilfs_sufile_get_header_block(sufile, &header_bh); - if (err) + err =3D nilfs_mdt_get_block(sufile, 0, 0, NULL, &header_bh); + if (unlikely(err)) { + if (err =3D=3D -ENOENT) { + nilfs_err(sb, + "missing header block in segment usage metadata"); + err =3D -EINVAL; + } goto failed; + } =20 sui =3D NILFS_SUI(sufile); kaddr =3D kmap_local_page(header_bh->b_page); --=20 2.34.1 From nobody Sun Feb 8 06:22:11 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 EE51C1B6550; Wed, 21 Aug 2024 15:46:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255198; cv=none; b=ucpkdcXtpWvIrhulTN//iCzroVDwGHoBfXxVAg88Ipxpzy9IymrfcT+vNcLUwAc2kVvC3iejICCjEytmXAF7MPSyPoUZ8cEvhBZR25fMCEnzteI/ApXE9rzjWqAh1KXrwAPTuwc5eEhhJmkl3o9cZUxK9ICWK2Yz+Gtrb3hXWXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255198; c=relaxed/simple; bh=tievpw9Idzq/oDwpY74VDYg1KuGt/WQKEAFeRIU6Tw0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=trrBeLimGRGhWBi4rprHdWq6MZjc4R1H2sYtT+XZ2alQqLTiuIGCZjNb7VxsiPpt1b1d/xi7PNArQgzt6F1DuFLNQFTxqfJCS92dd8yWezmqoXGByHIL3aPoVSEcTom+ByNBCWXbZHA0j4XvYOW3jWqyzDTGOIGuWwofuniC8Ro= 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=LPhsF0st; arc=none smtp.client-ip=209.85.216.46 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="LPhsF0st" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2d3c08541cdso5089967a91.2; Wed, 21 Aug 2024 08:46:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724255196; x=1724859996; 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=eglKytNjuCU8vkKlyKNC2ri1I5cDFqQw1/9BtAZicU0=; b=LPhsF0stKm3sDUbNF7Gs0QgFrEqCvgmsnxSSS1oPi3Ki1af3uTA2FlkESfqYMKtfAD rBwQc2p3BvwUrQ6BCpo8BuJevakgslERrx4xKB5FvuMJuswqkStkHa/Tk4/FGlNEB7dG 2MgIwfGno35ffsjBn9BGbPUd+yBBJPx+TFXlZ+pJ1sSTQ/Jc0hSGs/xmNA8g7javxakb 1KfiVyJdNuRMXznlvOIjIB0JPMtJYSud7sxYShAY08JhylEffUMNBvhUUVhNkdNzNbNG DV0OHbnRRFpW1PGQtSFKGpC4tLUBTEynawfGYHOI/UnEHRnTzHFhapLnWwsUwVeJEloZ 4YdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724255196; x=1724859996; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eglKytNjuCU8vkKlyKNC2ri1I5cDFqQw1/9BtAZicU0=; b=Qq1d78pwkERZFEHUjdouxmK3YBA8s2+aHyr+wc87zzl2OPZctMa3kTa9tSdQJA2KVg ZpUj2IcADjGx2u0pMY3DRep/6OUEPLv9CFKAv0xzCKaKB3RpLwErLksYWsJHWTb1dteS fp10WjsfMT+AhPxLELYFmNkSqeecchifiuh6Sdlafq97i4EJe2XnIs19zEQGob1x0x5K e4MF0S7GB7xcAsLtk4sGiff6xXoqv70JpW97V/lI/UR5ruv5MOpCfFAM560d37B6L4Wv nqj7nxmvLpeDBNCJ7zOALzcseu5avGFL4D4N0l/bvWbtc1t7F/WZuQA96te+Ah0rX+Du hS9w== X-Forwarded-Encrypted: i=1; AJvYcCV+TZmC1io+zwzDZ0IjV3E+16NtHWW0xSDBm6gh+XZq3YUL6w7U7PEopyEv0J3RpBOB/e7kjXAryR6aitc=@vger.kernel.org X-Gm-Message-State: AOJu0YwG41zIppmSrNjytxwmXzL3vgelybVUKrNXNXIQxyqZKhvUahKA aqOxAPxIzEXa97ccwDE1B110iGX/voxrwAv7qrBLI/aXb1fW3eme1A24wA== X-Google-Smtp-Source: AGHT+IHi5sDL4TxM47XCmRNFrC4fXQubFcUySiYsrocJ/D5FB87rcLO+Z3hXJNl/opQOg2gHqRtPjA== X-Received: by 2002:a17:90b:4f89:b0:2d3:dca0:89b7 with SMTP id 98e67ed59e1d1-2d5e99fb6d1mr3427976a91.3.1724255196035; Wed, 21 Aug 2024 08:46:36 -0700 (PDT) Received: from carrot.. (i222-151-34-139.s42.a014.ap.plala.or.jp. [222.151.34.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eba2e538sm2021098a91.17.2024.08.21.08.46.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 08:46:35 -0700 (PDT) From: Ryusuke Konishi To: Andrew Morton Cc: linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/5] nilfs2: treat missing cpfile header block as metadata corruption Date: Thu, 22 Aug 2024 00:46:24 +0900 Message-Id: <20240821154627.11848-3-konishi.ryusuke@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240821154627.11848-1-konishi.ryusuke@gmail.com> References: <20240821154627.11848-1-konishi.ryusuke@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" The cpfile, a metadata file that holds metadata for checkpoint management, also has statistical information in its first block, and if reading this block fails, it receives the internal code -ENOENT and returns that code to the callers. As with sufile, to prevent this -ENOENT from being propagated to system calls, return -EIO instead when reading the header block fails. Signed-off-by: Ryusuke Konishi --- fs/nilfs2/cpfile.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/nilfs2/cpfile.c b/fs/nilfs2/cpfile.c index 9c8d531cffa7..f0ce37552446 100644 --- a/fs/nilfs2/cpfile.c +++ b/fs/nilfs2/cpfile.c @@ -125,10 +125,17 @@ static void nilfs_cpfile_block_init(struct inode *cpf= ile, } } =20 -static inline int nilfs_cpfile_get_header_block(struct inode *cpfile, - struct buffer_head **bhp) +static int nilfs_cpfile_get_header_block(struct inode *cpfile, + struct buffer_head **bhp) { - return nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp); + int err =3D nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp); + + if (unlikely(err =3D=3D -ENOENT)) { + nilfs_error(cpfile->i_sb, + "missing header block in checkpoint metadata"); + err =3D -EIO; + } + return err; } =20 static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile, @@ -283,14 +290,9 @@ int nilfs_cpfile_create_checkpoint(struct inode *cpfil= e, __u64 cno) =20 down_write(&NILFS_MDT(cpfile)->mi_sem); ret =3D nilfs_cpfile_get_header_block(cpfile, &header_bh); - if (unlikely(ret < 0)) { - if (ret =3D=3D -ENOENT) { - nilfs_error(cpfile->i_sb, - "checkpoint creation failed due to metadata corruption."); - ret =3D -EIO; - } + if (unlikely(ret < 0)) goto out_sem; - } + ret =3D nilfs_cpfile_get_checkpoint_block(cpfile, cno, 1, &cp_bh); if (unlikely(ret < 0)) goto out_header; --=20 2.34.1 From nobody Sun Feb 8 06:22:11 2026 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.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 42F311B78FB; Wed, 21 Aug 2024 15:46:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255200; cv=none; b=bviQSqsD/6fBo3sES5/v9R/5bOGSRP7YY9zChfmfEntAlQjJixh1dstB8FTXPMEKYbHyLqV+IM0tdZGPHPyz9Wy3R2hfP0gNLldiXWKTT3Q8nsTbt6yUbLqITXN7kmzTEoS4lStnU2CkrJooEW0Wh2xLJ8xWkizyR0MVEO7RUJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255200; c=relaxed/simple; bh=dyHwrmDque8X9gPKXwTCf9t+4xdKw1IeaYWHDDK6ZNs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eFC4OdALYnZ8c2RMiYSV78Wi41sho7dMjcfzuS8VC1+8tEkYD8LBAfj12W/fALaWMSFKgj3yevHocgww49abqqFt8HPDSKSSVhugSnsBhYsHCGJso2Tsb+86FryvXhe6okS07aCF2AelrfZVl3fMzFHGai8O3KpEuogqn85XcWE= 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=Z7DliZKU; arc=none smtp.client-ip=209.85.215.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="Z7DliZKU" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-7c1324be8easo706314a12.1; Wed, 21 Aug 2024 08:46:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724255198; x=1724859998; 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=okyjJddQCAR4b4zTRnWTqLOmAFuejt6oQ+YBSC01fX4=; b=Z7DliZKU4vlcZtcRYkQnSOVH07t9v8WWyGwWV5TKMLPYDP03ki3GsXZfmh3zN64M2o HmrdvGyJ3miIGih7M9r88NyIlaDXjtAZfAeFPUSVdbC8cbFWQ+Kxx4Vg3ynLRQ9jhhwN Ofjf6C7ssM7idhMoq2qzbFr2Ydb9zQmGNxwqNitYvl5oAhq9zRdxKAqCPp62SUuv3Ilq E7fLY4d9O9PKOc9BTw5nwKgws3AfTNOoJZ2fkjFqoWhTM+B9nit0N5hDNw5onsXPMOKH Zgwr3GIHWQ80Uq0gpRPzQBEC75AavLLPLR3n6nZUXTG/n+eVYHlS7CrqAKAwwbcZI7hm saMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724255198; x=1724859998; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=okyjJddQCAR4b4zTRnWTqLOmAFuejt6oQ+YBSC01fX4=; b=w9bcZGWlF4txU/ojty18sQrFq53P/witoXjsit7K4RbIRhMP183r9ALYJ3KYJCgXyp luMBEnoAs/6wLOg2F/HWTUY/dfvBWjiUtaqVDIm2P0GA0sNd8eBHmeXy7QV3t279JAiN JcDuS5X+MTxOsQIlx4UUAalHoPcsAhjVaUtKEcdn96UxRDCfeIZJ8AN4CFbwgPjdpw9D lxtowo1cFrSZg/msjK5KIAabuxR4VBOVLW0MYzP423g7RSL2X/7MkWtI79b2+yBsqb2T mXWOOWQxtpFWDFKOmM/vw0gKoTlOIkWdgqyWtcLsPiX7/xN3tikoPMAW3uKBOyMzn/lM i2cA== X-Forwarded-Encrypted: i=1; AJvYcCXKWRiQy0X1iO/XM1rA/As+gbRtKnKJaN16/5I5PRMnqYeTMobIAHxHrpWXl3jbyeFJbklQgB+HnrY9eco=@vger.kernel.org X-Gm-Message-State: AOJu0YxCIgqlr/zoapztNJ0QHlVxShqf74oVO01HdGEeRZ1+WF8vCmjj dxylQntdXxBr5196sjhvVDItIgMkd2e8DONC7whe2fibUE4hnnlZ X-Google-Smtp-Source: AGHT+IGUe+42oaOCNfh33/iFC6htXHjHsWlSmbUzbWJNwInYx75OQd4Yv66ZzH9SsfOWE1yQ2RbblQ== X-Received: by 2002:a17:90b:4c8f:b0:2d3:c084:9d93 with SMTP id 98e67ed59e1d1-2d60a9c68b7mr60493a91.14.1724255198148; Wed, 21 Aug 2024 08:46:38 -0700 (PDT) Received: from carrot.. (i222-151-34-139.s42.a014.ap.plala.or.jp. [222.151.34.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eba2e538sm2021098a91.17.2024.08.21.08.46.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 08:46:37 -0700 (PDT) From: Ryusuke Konishi To: Andrew Morton Cc: linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/5] nilfs2: do not propagate ENOENT error from sufile during recovery Date: Thu, 22 Aug 2024 00:46:25 +0900 Message-Id: <20240821154627.11848-4-konishi.ryusuke@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240821154627.11848-1-konishi.ryusuke@gmail.com> References: <20240821154627.11848-1-konishi.ryusuke@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" nilfs_sufile_free() returns the error code -ENOENT when the block where the segment usage should be placed does not exist (hole block case), but this error should not be propagated upwards to the mount system call. In nilfs_prepare_segment_for_recovery(), one of the recovery steps during mount, nilfs_sufile_free() is used and may return -ENOENT as is, so in that case return -EINVAL instead. Signed-off-by: Ryusuke Konishi --- fs/nilfs2/recovery.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c index 61e25a980f73..cd364cd26a97 100644 --- a/fs/nilfs2/recovery.c +++ b/fs/nilfs2/recovery.c @@ -433,8 +433,17 @@ static int nilfs_prepare_segment_for_recovery(struct t= he_nilfs *nilfs, * The next segment is invalidated by this recovery. */ err =3D nilfs_sufile_free(sufile, segnum[1]); - if (unlikely(err)) + if (unlikely(err)) { + if (err =3D=3D -ENOENT) { + nilfs_err(sb, + "checkpoint log inconsistency at block %llu (segment %llu): next seg= ment %llu is unallocated", + (unsigned long long)nilfs->ns_last_pseg, + (unsigned long long)nilfs->ns_segnum, + (unsigned long long)segnum[1]); + err =3D -EINVAL; + } goto failed; + } =20 for (i =3D 1; i < 4; i++) { err =3D nilfs_segment_list_add(head, segnum[i]); --=20 2.34.1 From nobody Sun Feb 8 06:22:11 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (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 201AB1B791A; Wed, 21 Aug 2024 15:46:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255202; cv=none; b=uCLQaIyjRB+uYCRyLcZ4UZD53Hp6hIojCM7WH/27kTLlIivZUVYBYoKasGzU4wcTgO4Tai2cnjwzZwQ2ysep1QwieA4fv+GUzUHmGauIW7qnN/Afc3Manybue8rdMTu/nL/O7gKD2/CrP2oSJeThYUyfpm/ZBpXgThhe5y7Yl2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255202; c=relaxed/simple; bh=6EqLNP4se642Lg03ufB4FhGvNCI6hjMuafpaCD2hDfY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PD1dhIRkeNDZShxw/i5fmngll7XEWBpPHimtlfm9ODJXfb3RY7+AzZ/NMLF9NVNRYQQK9kxeWZc/gHhVUrcyTTxlNWQYM3zb/Tl1Fdl6YBy6ifiZY0QrVdZK40S0h0yw4/fHfzrr+f/SSfbq/BC5Um+0FaPahz9GjDCLEOuiGdE= 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=CFiWbPsE; arc=none smtp.client-ip=209.85.216.44 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="CFiWbPsE" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2d3c05dc63eso5105449a91.0; Wed, 21 Aug 2024 08:46:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724255200; x=1724860000; 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=B64wYynHBKuuyZA2Ig3tXfd9fRM26CzND3LkSG9yPr4=; b=CFiWbPsEMg8V43RiKIjYzjF7NM++vr/26VoFuqc4rTJF7kKm/wuWk9rsvrbAvzLERE Od9CKsD6jDuSsuFrd+k4DizV5xbVajbDUtvj3h7NEvyTRO0wUCfrIKFCB6XbF0nvDXcV wXTIQhy10dY4eAw58sMTnVyGSUtDCV0WYt6o8FiXhsG47rVbe9SDPzdWQGBQ36GXYOU6 A3TPKdmSRDBmsDOVy4iA/O1/CJgFGndG2bO6aN71iGvviksnSFJNtz33vJuXrSQ4o4/y bbuGwiHsw7k2MCtyRnjHTErUonExQXrG4dqAhUBsqRGgfldmyKG/1AK/wjzEIUsqUh+l +Uow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724255200; x=1724860000; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B64wYynHBKuuyZA2Ig3tXfd9fRM26CzND3LkSG9yPr4=; b=pzpixLWg5gmaTxVFT04err1JuiEQ2BwouqBt8C8V0hps0FI6SDw/9DkrCybLxkYhZY ffrxl68f7+CauJnB/yIyg7lPi0WlluvQjJzwWTn25lKQj8XHkFvhHKm8G8KL60jPjzHt m4t5kZloli+lbDURnxJcftrkL7hLlDShMSTMVTF7o7eC7vpJMOQGrh7lifMnGBdxTgg9 7Jnjz/gnLgSV5eVX0XYTeBLhB3uTzxLzFVVw4CeQVxIN7pxaRMfd+HTjb6x7IqNR0dyZ gb2Sw3FRwrCN7azwzz378UrAQ+/lXmMvqhc20I/y2PJMr+0YwDkY7p0efsEf0fQ4EElS 23OQ== X-Forwarded-Encrypted: i=1; AJvYcCWO3jZ+hPX0D6pvWGQUcYiWNcgWRxXbQmsHV2AVz8Zc9kr7UmWwzgJN0zOIbzEv6labosGp7eHrwloNnn8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8UtHJn1QjIw7jDUNdl+E42spyj+EZ3qSsA2zKYTRsQnI7MBQn JQRIVKqelaKe0HIuqQnLdWF715eBn7ZNcn3o1N1HC5Zu3hrwepbjp7mJVA== X-Google-Smtp-Source: AGHT+IFMC70+U0HL0blRZO9vu2HRnxtPdwOGVBF+NJjJIJFc4hK0J3pBW/5Hjk2D9/saaHRYCIbLMQ== X-Received: by 2002:a17:90b:384c:b0:2cc:f2c1:88fb with SMTP id 98e67ed59e1d1-2d5e9a2ee47mr3086091a91.16.1724255200263; Wed, 21 Aug 2024 08:46:40 -0700 (PDT) Received: from carrot.. (i222-151-34-139.s42.a014.ap.plala.or.jp. [222.151.34.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eba2e538sm2021098a91.17.2024.08.21.08.46.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 08:46:39 -0700 (PDT) From: Ryusuke Konishi To: Andrew Morton Cc: linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/5] nilfs2: do not propagate ENOENT error from sufile during GC Date: Thu, 22 Aug 2024 00:46:26 +0900 Message-Id: <20240821154627.11848-5-konishi.ryusuke@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240821154627.11848-1-konishi.ryusuke@gmail.com> References: <20240821154627.11848-1-konishi.ryusuke@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" nilfs_sufile_freev(), which is used to free segments in GC, aborts with -ENOENT if the target segment usage is on a hole block. This error only occurs if one of the segment numbers to be freed passed by the GC ioctl is invalid, so return -EINVAL instead. To avoid impairing readability, introduce a wrapper function that encapsulates error handling including the error code conversion (and error message output). Signed-off-by: Ryusuke Konishi --- fs/nilfs2/segment.c | 64 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 871ec35ea8e8..765d55333a13 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -1102,12 +1102,64 @@ static int nilfs_segctor_scan_file_dsync(struct nil= fs_sc_info *sci, return err; } =20 +/** + * nilfs_free_segments - free the segments given by an array of segment nu= mbers + * @nilfs: nilfs object + * @segnumv: array of segment numbers to be freed + * @nsegs: number of segments to be freed in @segnumv + * + * nilfs_free_segments() wraps nilfs_sufile_freev() and + * nilfs_sufile_cancel_freev(), and edits the segment usage metadata file + * (sufile) to free all segments given by @segnumv and @nsegs at once. If + * it fails midway, it cancels the changes so that none of the segments are + * freed. If @nsegs is 0, this function does nothing. + * + * The freeing of segments is not finalized until the writing of a log with + * a super root block containing this sufile change is complete, and it can + * be canceled with nilfs_sufile_cancel_freev() until then. + * + * Return: 0 on success, or the following negative error code on failure. + * * %-EINVAL - Invalid segment number. + * * %-EIO - I/O error (including metadata corruption). + * * %-ENOMEM - Insufficient memory available. + */ +static int nilfs_free_segments(struct the_nilfs *nilfs, __u64 *segnumv, + size_t nsegs) +{ + size_t ndone; + int ret; + + if (!nsegs) + return 0; + + ret =3D nilfs_sufile_freev(nilfs->ns_sufile, segnumv, nsegs, &ndone); + if (unlikely(ret)) { + nilfs_sufile_cancel_freev(nilfs->ns_sufile, segnumv, ndone, + NULL); + /* + * If a segment usage of the segments to be freed is in a + * hole block, nilfs_sufile_freev() will return -ENOENT. + * In this case, -EINVAL should be returned to the caller + * since there is something wrong with the given segment + * number array. This error can only occur during GC, so + * there is no need to worry about it propagating to other + * callers (such as fsync). + */ + if (ret =3D=3D -ENOENT) { + nilfs_err(nilfs->ns_sb, + "The segment usage entry %llu to be freed is invalid (in a hole)", + (unsigned long long)segnumv[ndone]); + ret =3D -EINVAL; + } + } + return ret; +} + static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mod= e) { struct the_nilfs *nilfs =3D sci->sc_super->s_fs_info; struct list_head *head; struct nilfs_inode_info *ii; - size_t ndone; int err =3D 0; =20 switch (nilfs_sc_cstage_get(sci)) { @@ -1201,14 +1253,10 @@ static int nilfs_segctor_collect_blocks(struct nilf= s_sc_info *sci, int mode) nilfs_sc_cstage_inc(sci); fallthrough; case NILFS_ST_SUFILE: - err =3D nilfs_sufile_freev(nilfs->ns_sufile, sci->sc_freesegs, - sci->sc_nfreesegs, &ndone); - if (unlikely(err)) { - nilfs_sufile_cancel_freev(nilfs->ns_sufile, - sci->sc_freesegs, ndone, - NULL); + err =3D nilfs_free_segments(nilfs, sci->sc_freesegs, + sci->sc_nfreesegs); + if (unlikely(err)) break; - } sci->sc_stage.flags |=3D NILFS_CF_SUFREED; =20 err =3D nilfs_segctor_scan_file(sci, nilfs->ns_sufile, --=20 2.34.1 From nobody Sun Feb 8 06:22:11 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 509271B81CB; Wed, 21 Aug 2024 15:46:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255204; cv=none; b=Z4OeLrBNdOoRNqBouAF7BwMDqJ8GigxjLCWiFOtjAgq10uJO+XQ02LB5n2gO8N9s472QH4I5Owr8qRAjP2YC2qNwRdbV9G6Dr7e+g8cSp4QqIpy4gf2zVZI79NfCgANnI8IJ7LFDt/Yi6sJedisDr/2qLVqSTFV8PFScJrXkAzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724255204; c=relaxed/simple; bh=JFhvxudKAyDcJoff+u30SQwG262RmxSemzEJxC4bf7k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=H/L1oxBoR/+wd9BSJwGQK6bPjWZGYDqU9bg9yxVxn+7jekT7mf9EVCsE/jBKNUfAmiscQNGPLol1tvdLkoq+SZ4hyx0UPlEm4/Fb3NEPSHqNMrtf0O+qea7mxmY5EGN1nvrRJ1xsdO0u5RiBXWDNfJ0OJ3dbVTrsgDpKFfn5JJs= 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=TgIfCWgq; arc=none smtp.client-ip=209.85.216.50 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="TgIfCWgq" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2d3c5f769d6so4797345a91.3; Wed, 21 Aug 2024 08:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724255202; x=1724860002; 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=sJ754iKlMI0/FfjFl9UoTlxsvxa5x9Z9ZGZU52BNo2A=; b=TgIfCWgqiNV2SC0Foy4z7xlaci37ZfHW+R4IuH4uG3qxwxFcr41yVdwmJF1nkZSlYt HtD2CtgjDzEEirHNNjRnzw6NE7z7+DSB94Z9zo29l4Ees9MJ3WAEdv177/7mkROTSysO 79HjMFhGZ2GkXrBtAQiJzp+G3hVlmbprcWvYmqLesOMtZPtLysVNHiyc04ujCdXqK+wB QYAmTKmpeLzbZMY+AeRcnRV/lIk8CmCmHcv5vG4n5rSVtfTlV51GHJKaw7kvYYrAWAmQ Bxx7F1qIAmvPEwzLh6V22fLdydphyr6ZEn7b6O89RPeUODo2Flyh9mwxQOrx4qDw40b8 toBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724255202; x=1724860002; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sJ754iKlMI0/FfjFl9UoTlxsvxa5x9Z9ZGZU52BNo2A=; b=ij1IM/QzWtBa8HxM2ONc0pq5ZEvNbjfZh/bDqPa1clyJ0TduWsdBAbQNBapTy1cpee QeWtOLD9VrHKcbPL1YYoZGx+tt3OvCG9r3VHD3UgMLVwNwZuvM8LNoRBv9X0JLR+5lVe 5hJXXA9kSxOXq3Vd7C2uk+ZKh5J5dTkAvyHHYwfvjywOYBFStsRrVbJ3mkjaHYMyxUIH Mfea4/rjj087j3YMkX8LnFE/Oju3RoaeOVdPNzAv93/OIF3EZ12TUXGg051sg0oBwo4m Nh8eJR2PkfDufxmTRYBUjqMETPaNwecTAykMoYY9G3xPad/3i8wS8QWwAv8PV+fegZAR oToQ== X-Forwarded-Encrypted: i=1; AJvYcCWB9GwdZzz4ll41UYV6UWkNr3i17bS/NM9qFJRfvOqo063D3IWfPjmI40SvC1vkjrLr88K7jFsFbLG8QQg=@vger.kernel.org X-Gm-Message-State: AOJu0YzKI5m/096PX2Z6We0Li+1XmD1DDbCi5To7wiqLeVv4wkmYfsfr iK7PiQFNZLTPhIEEhL0P6p23eHmKMCC1jbJvY+77gs69nwvV7P20DHgFSw== X-Google-Smtp-Source: AGHT+IHfGsDV7o6EBNNiTzBgeLr2GJHrti9TDmVj/Y33OPr4IXAGi1WakkKwHV1OzKV6vOzEt6F4Fw== X-Received: by 2002:a17:90a:b00a:b0:2c8:da73:af82 with SMTP id 98e67ed59e1d1-2d5e99ec785mr2906918a91.10.1724255202323; Wed, 21 Aug 2024 08:46:42 -0700 (PDT) Received: from carrot.. (i222-151-34-139.s42.a014.ap.plala.or.jp. [222.151.34.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eba2e538sm2021098a91.17.2024.08.21.08.46.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 08:46:41 -0700 (PDT) From: Ryusuke Konishi To: Andrew Morton Cc: linux-nilfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/5] nilfs2: do not propagate ENOENT error from nilfs_sufile_mark_dirty() Date: Thu, 22 Aug 2024 00:46:27 +0900 Message-Id: <20240821154627.11848-6-konishi.ryusuke@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240821154627.11848-1-konishi.ryusuke@gmail.com> References: <20240821154627.11848-1-konishi.ryusuke@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" nilfs_sufile_mark_dirty(), which marks a block in the sufile metadata file as dirty in preparation for log writing, returns -ENOENT to the caller if the block containing the segment usage of the specified segment is missing. This internal code can propagate through the log writer to system calls such as fsync. To prevent this, treat this case as a filesystem error and return -EIO instead. Signed-off-by: Ryusuke Konishi --- fs/nilfs2/sufile.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c index f071eba48163..eea5a6a12f7b 100644 --- a/fs/nilfs2/sufile.c +++ b/fs/nilfs2/sufile.c @@ -513,8 +513,15 @@ int nilfs_sufile_mark_dirty(struct inode *sufile, __u6= 4 segnum) =20 down_write(&NILFS_MDT(sufile)->mi_sem); ret =3D nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); - if (ret) + if (unlikely(ret)) { + if (ret =3D=3D -ENOENT) { + nilfs_error(sufile->i_sb, + "segment usage for segment %llu is unreadable due to a hole block", + (unsigned long long)segnum); + ret =3D -EIO; + } goto out_sem; + } =20 kaddr =3D kmap_local_page(bh->b_page); su =3D nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); --=20 2.34.1