From nobody Sun Feb 8 08:42:50 2026 Received: from mail-yw1-f171.google.com (mail-yw1-f171.google.com [209.85.128.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 80C953A1E9F for ; Thu, 5 Feb 2026 09:49:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770284983; cv=none; b=KT/pADZ++oSerAMr1ySibpE4f1HJ0DwBclJEO2bGQ5BucKVumWafPyjkOqRm5kwxSjTZnQM1ES7hKYgxQf38dasjdhGe1qQcyp0vfqCBIKqPc/AEi35J5KvlpA6IG/byszG1MJamhkUb9fFUGmrpBF7ztJy4AGSTprh4ZNYjeQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770284983; c=relaxed/simple; bh=uqbPScY7Mrr9zbcPk6OPKeVSt6cBkne8zch+j08rxGA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=QYiK3u6q44ayqlQPiy70DDakAcEoBiEBXJiaSYGYI0vr3BiWY7OqeWH9JFpAmURMRevoegVj3fSSjK3FhKAWccQ2CZNFWfJNNhgSfCJ+CdhkhMbLE84MfDzZq0ZomEiHh/bACfIg76Cr79lXpLCopgDDySGJ9VAJe6UuV5bZ7f0= 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=SummQbMl; arc=none smtp.client-ip=209.85.128.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="SummQbMl" Received: by mail-yw1-f171.google.com with SMTP id 00721157ae682-7950881727cso5260767b3.3 for ; Thu, 05 Feb 2026 01:49:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770284982; x=1770889782; 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=rbWiDKnd62npO8LZDnvmNT6GdPwvNySxgdLg35IKHns=; b=SummQbMlI1W3VeLmNxxzfpBJrZy5YLl5fPR4LoawhJ4Liv5v8uXHanf0LJTwBY2IoA iirulTKQrw7TauBxxxVujDlkA0o3OoOGsYXiL3DtRCcSZHYVlDs/dnRegZeOtDTCpKtb 7ZIxeUh+nWqMbTVaxeULVUbGe7SEEJUX5x33SOC0PD6/3Ab+nHhJORdjuCG1RamG02WF 7mAz4rfydj5KT9vS1xrJWfDAtvloS57WfsZVwN5uWkXxmyTeKLhPn6UXzOLHtc+t9nSV bR4/f/oeE+tJzKzB70FnORihLUZsAlskYJWM6AQpUgHJcRJ9zkgOSGpaV+zHfI31YJ1/ oYQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770284982; x=1770889782; 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=rbWiDKnd62npO8LZDnvmNT6GdPwvNySxgdLg35IKHns=; b=hyA3gNxSZyY0rugeihkrf58CAEaxzf1sA1uKyZaDK9OzAUVqBnUL+fkzFDRYJa54XK qUFuJGGI+rM0HUNEUAhT08za7GWW6YcjXIFGR+suV92KPNRzhIqycqO78C4qyJCw0Ayh GtCOnihbjMJ+HQKPFlmWoI6wiu8riAddOn0nrd3JyxApiF3esK0VicEIM7+TaWRdFY8W /EfPzVxsHkomVyji1noPeAQIqBC5dz/+205tshmn6mjX+cArRqZYCCAxeppe+oqrl5OT PPHLXWHw3cSzV64eSbtQwF7ShK5IaIxUG1Fp+iEbM8cicpdt/Y+ITyRMZcLHW4Esr7wx Oo2A== X-Forwarded-Encrypted: i=1; AJvYcCV1a3QDOgYlZWHnt2o714dGrXkz9dEB5fJ25Gl8ycOD+wVNSN+uZaVbxjQ4oSadqBligBkdVxd78fi379I=@vger.kernel.org X-Gm-Message-State: AOJu0YzyLsTA1ZQabSj2pOK00tAizeRoQyAffV8mHSogDQAffezg5gi7 YX9/KFQ4s/9syMixAsmhuyJnSoCLNMSYOhyBYjm+D/TkGyk22VdxAG7W X-Gm-Gg: AZuq6aK5wPZ9pzSEQtQA7Blle6GqApQYRoM7vG4vyiFYxmRi85c7968WVGSHdaaBXi5 pqSsCJT6HQEyz7qoppMu8I0SXJRJafeguLwm6WvPTrmmNpmTsD+jvJu0LIWgsi7UhhmKDWir6+O yLcpK2a1nH4Z31mr6TnXcplEPpzK3pKgvDSVMpDL/AIaCqnLnBFRUDTFW+0RYAtVOUJwVo81tOC 1DU1f3oYFvQ+u8BiWICsURQEksNox/eFBq0OrcblaQ3Vxxz+nO8Rto5EuW+jiKxrzywhFK+y250 4i/6ve7qhwSQsyIy4KX8JghXH7eFHl8CN7o0YZJpkpamCZBW/UI66q5929cHweVa91eibT8noKS 84pYkYE16AYDZCLfNLg1Hr37G1lkDknRlvwwM36BF42rsng82o8+xDm0N7WdgC8MRMFes1m9Vn1 jWTETfKCYn0MdiCs7n8GnCOXQkWyBLOT8RwrI+/NEYpea8rHF0xs77mQYBggVcRyRRoZxlzurQh f6l2MUhBg== X-Received: by 2002:a05:690c:f03:b0:794:9683:4486 with SMTP id 00721157ae682-794fe69c472mr113447537b3.30.1770284982504; Thu, 05 Feb 2026 01:49:42 -0800 (PST) Received: from localhost.localdomain (108-214-96-168.lightspeed.sntcca.sbcglobal.net. [108.214.96.168]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-649dc5ea03bsm4807961d50.24.2026.02.05.01.49.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Feb 2026 01:49:42 -0800 (PST) From: Sun Jian To: Konstantin Komarov Cc: ntfs3@lists.linux.dev, linux-kernel@vger.kernel.org, Sun Jian Subject: [PATCH] fs/ntfs3: return folios from ntfs_lock_new_page() Date: Thu, 5 Feb 2026 17:49:34 +0800 Message-ID: <20260205094934.10500-1-sun.jian.kdev@gmail.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" ntfs_lock_new_page() currently returns a struct page * but it primarily operates on folios via __filemap_get_folio(). Convert it to return a struct folio * and use folio_alloc() + __folio_set_locked() for the temporary page used to avoid data corruption during decompression. When the cached folio is not uptodate, keep the existing behavior by calling folio_file_page() and converting the returned page back to a folio. Defensively handle error pointers from folio_file_page(). ni_readpage_cmpr() is updated to consume the folio return value while keeping the existing page array and cleanup logic unchanged. Signed-off-by: Sun Jian --- fs/ntfs3/frecord.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 641ddaf8d4a0..a23aaf34f001 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -2022,27 +2022,31 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_= extent_info *fieinfo, return err; } =20 -static struct page *ntfs_lock_new_page(struct address_space *mapping, - pgoff_t index, gfp_t gfp) +static struct folio *ntfs_lock_new_page(struct address_space *mapping, + pgoff_t index, gfp_t gfp) { struct folio *folio =3D __filemap_get_folio(mapping, index, FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp); - struct page *page; =20 if (IS_ERR(folio)) - return ERR_CAST(folio); + return folio; =20 - if (!folio_test_uptodate(folio)) - return folio_file_page(folio, index); + if (!folio_test_uptodate(folio)) { + struct page *page =3D folio_file_page(folio, index); + + if (IS_ERR(page)) + return ERR_CAST(page); + return page_folio(page); + } =20 /* Use a temporary page to avoid data corruption */ folio_unlock(folio); folio_put(folio); - page =3D alloc_page(gfp); - if (!page) + folio =3D folio_alloc(gfp, 0); + if (!folio) return ERR_PTR(-ENOMEM); - __SetPageLocked(page); - return page; + __folio_set_locked(folio); + return folio; } =20 /* @@ -2064,6 +2068,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct fo= lio *folio) u32 i, idx, frame_size, pages_per_frame; gfp_t gfp_mask; struct page *pg; + struct folio *f; =20 if (vbo >=3D i_size_read(&ni->vfs_inode)) { folio_zero_range(folio, 0, folio_size(folio)); @@ -2099,12 +2104,12 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct = folio *folio) if (i =3D=3D idx) continue; =20 - pg =3D ntfs_lock_new_page(mapping, index, gfp_mask); - if (IS_ERR(pg)) { - err =3D PTR_ERR(pg); + f =3D ntfs_lock_new_page(mapping, index, gfp_mask); + if (IS_ERR(f)) { + err =3D PTR_ERR(f); goto out1; } - pages[i] =3D pg; + pages[i] =3D &f->page; } =20 err =3D ni_read_frame(ni, frame_vbo, pages, pages_per_frame, 0); --=20 2.43.0