From nobody Sun Feb 8 03:57:23 2026 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.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 74AD51F192E for ; Sat, 31 Jan 2026 01:35:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769823302; cv=none; b=ury2mAi5i6X/udarSc2SLQs+dzrv79diIYspPh1ttnHFyd8U1piFVEHR2qk5QLP3S6ZSJObtbkQ6lpe+wjDZGm8gDVUKOPAq+IhWSfSEa/CO1MAHIcj5QxT6iJM6dzzrTjD6Hgu6h8e90BSQw3vSu+v7XO3afZEm+pxf5FCAtgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769823302; c=relaxed/simple; bh=GoHql7EaEQvfoO0D2xqCpqDhl0MRna3jHTu4nLqkUyY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ToflqBHlPFNbxfetTNiA9Nk2km9INNEeSGxKrIbpHqJ+Ju17FUP6srMqojU2VXLvDX3oZ/ALKhAcnCsdtQkPwzhLw1WGltnfsj4ILn3tOPcAksEDB8kATU4DLgbSABc9FYhZBfnGaKg6w7JLzzO81M8Ms90GvaR1R8glxurdLGM= 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=bWcZYq+o; arc=none smtp.client-ip=74.125.82.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="bWcZYq+o" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-2b720e4dcb4so3488365eec.0 for ; Fri, 30 Jan 2026 17:35:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769823300; x=1770428100; 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=BryjHVsexNAzF59csTx3vohA2syzy8GP7++lXET7oyI=; b=bWcZYq+o/tVpbeu2qRBi7WCdcqpZ+CNKOEL2YSKt4acAUoO7WtGh31UbcG98bkzCZx NP36i7HTUjSRWm5gYkmVhimZFQpGCPt1J1aq2aJovTiMYwPOlblAXamYraNV6sUUC7pb Shd6EezYpAyzxb+GSqzE7poKADcsY8Uvbvhb3IER2RV4iYQv2YyI2b2a2MQZhr0kmBAK hmdUOEIw6JLBprPvXHDl7w2GfRG/IRYLKIzgFEPaHsNRvev3QGFwZK8y/d0nF2l/HDIC f06OgN3QHp/pSmixzDYFE3z77GNWyPBAsufTKe2ohm9FPfM6h15h/eQ/haP8oZtDcl7k 6SIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769823300; x=1770428100; 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=BryjHVsexNAzF59csTx3vohA2syzy8GP7++lXET7oyI=; b=W4kTESfdorY2rMlDaeyPuAqGNZQaFRyS53Q53291HnBn038z4b3oWDPVR6jG1dDVjd kaj/iv7eC3+lIpPI+muwnsnWaWi0FYI2vlr1qRDqfVKIgOBEIZSLUanijebIHg/u6DqF YfgJ9ZZ9/bFLh7vlcYT0/rVHQEGeNVtFBYLIJKd9iY61Xv1yT2wWDbHwVAVcsw3RMF4G ZXb1Mi8qzeDZLjtJBvij1GW0q2k93S4FUJYeQxcwbyFRmcMSgx1Kmkdsd66eTmqtF6Ri fac8lxAZUqdTDmz0F79r0PFBmlId67BK1ZoKQ+r2kqMxkFgYQO3aAeNvdxwv8AGioU3H CHsQ== X-Forwarded-Encrypted: i=1; AJvYcCW7ycEOlQEs5ftsIoJZqI2zAhwvpxXKePjsbfCFRWSRK/jb3mmLIO8EEOPP8x3fAdVNNfQGCu/gXMN+sUk=@vger.kernel.org X-Gm-Message-State: AOJu0YwG3vJSsyS09OgOUL93wwNREkpdovyucA8E9Wn6Qw3yMLmWg8WA pQx6gbs7PASL6uTBMw5FtPDHInPwn3F+6NxVlER/b3ZUjSRg59kNk/+GMISdBg== X-Gm-Gg: AZuq6aI+B3CE6F5efGWC5AjhqfWzu3gyFrtO71ZbLYaCYdZAvY+921nmoNHzqLsGY8e pX7aLMeDKGaLUaFiWdzAil20j8byxViPC4zI75JQniDGy/PwVWTV/ptxEQFRYCDz5RzL0Lzrgkp 6gDJPaf1D/q1NXhvt/eZTjFmzNcoDOyQvwTqk4ZR/R/NeNeo6gcb3ufk/4sDwP6+x6V/vPTYk3u 4CMYh4FK5rhIuZn4IP04bp3AVwYRA7NTRjUWbF4SCIO73EB7uQCLozXFLjDvQRCLep1X0TZ+r7n u7bJ2YsAgorpXkWiNmfok9CH/1aoG81PYc1mVQTSHOnX515DiAvdepJwqa0U2MDktDsbBjw8ERj DvPqrwNb1rGQM44pYw6slOcY7ilsazD10P5kCMl5Vim4ql5AVTzrbUI2McdoNJDjLBITCGilTEU e0gpeJRFIFFAta8CjGsAeubYLT8tmmTs3sb2DeOu/SAx3VMgwyxmpa6+Blc+/BsA== X-Received: by 2002:a05:7301:e22:b0:2b7:265d:9eb3 with SMTP id 5a478bee46e88-2b7c895a399mr2558248eec.41.1769823300516; Fri, 30 Jan 2026 17:35:00 -0800 (PST) Received: from jpkobryn-fedora-PF5CFKNC (90.sub-174-249-150.myvzw.com. [174.249.150.90]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b7a1af88dasm14454498eec.32.2026.01.30.17.34.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 17:35:00 -0800 (PST) From: JP Kobryn To: boris@bur.io, clm@fb.com, dsterba@suse.com Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH] btrfs: guard against missing private state in lock_delalloc_folios() Date: Fri, 30 Jan 2026 17:34:38 -0800 Message-ID: <20260131013438.286422-1-inwardvessel@gmail.com> X-Mailer: git-send-email 2.52.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" Users of filemap_lock_folio() need to guard against the situation where release_folio() has been invoked during reclaim but the folio was ultimately not removed from the page cache. This patch covers one location which may have been overlooked. After acquiring the folio, use set_folio_extent_mapped() to ensure the folio private state is valid. This is especially important in the subpage case, where the private field is an allocated struct containing bitmap and lock data. Failing calls (with -ENOMEM) are treated as transient errors and execution will follow the existing "try again" path. Signed-off-by: JP Kobryn --- fs/btrfs/extent_io.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 3df399dc8856..573b29f62bc1 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -332,6 +332,18 @@ static noinline int lock_delalloc_folios(struct inode = *inode, folio_unlock(folio); goto out; } + + /* + * release_folio() could have cleared the folio private data + * while we were not holding the lock. + * Reset the mapping if needed so subpage operations can access + * a valid private folio state. + */ + if (set_folio_extent_mapped(folio)) { + folio_unlock(folio); + goto out; + } + range_start =3D max_t(u64, folio_pos(folio), start); range_len =3D min_t(u64, folio_next_pos(folio), end + 1) - range_start; btrfs_folio_set_lock(fs_info, folio, range_start, range_len); --=20 2.52.0