From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 91E0C346FA9 for ; Mon, 23 Feb 2026 07:04:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830293; cv=none; b=FVRVUT+uIuMV5hPQPElWTAkblQ4RT9Cz/GXCsKNA1NhqI9AbOhCS3cqn2R/HGBKjOmBErYObYMhV2FSGYcRytV71YuWN0SRfj2hqaLZvMKtfb8mgcse2CdNoQ8qOiznsTsBKHQeRomPOd719qUkpvqjhjEDVf82eIFuKRjg4XFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830293; c=relaxed/simple; bh=w37966m1o0RmX0vyIvS+1AaWr3RY1h7nrLYdurJIUkk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=S+pyYV2qd8YR/6vBW8dmN1MMpC4nw8hq5sCLqmNF2eb5pyFBRBwUcZtQxsfzrRCVwrbGum92mqSBydd4+L4OfbdhhPzg/TtwxREw2+DKLFOPikNCPaO3USEOMyvy0pRy0byuXJnMDhk/yYzSSJxmyqCS6/gVik5u6RlmrZKc5Kk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ssJgzKJf; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ssJgzKJf" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-354c44bf176so4017689a91.0 for ; Sun, 22 Feb 2026 23:04:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830292; x=1772435092; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=5lJdfKFYNuLjR953Ng0mcH/dDhHLbnTZ2j5PCnoQPSQ=; b=ssJgzKJfjj3StHv2ZNgcIrJITDH1qRhsBjABDL1pZsmdjr89/dkTfFYKjERlzUkppJ GJv+STOgjzvG5GSB7S7NeOFh+fvwOevbtMNiqOacM/VA0pYCFFhnWy2PJpD0FmT6BNy/ cA6bHCiBgelkvCwVs16xLJ443A1NVjgBUYC7HPP/iK4KcW+A0YbgvzLw4dezj0LOq8pD P990bWgdp3siKnitspKpEFtxfXnkKh66mK9c1xu1bn2MmHAFahcEvAR4HxBt+N37fOpI EVlfZd7auyZCn3vFY4FacY7wHhsb4zWrWktI1lgbTegYroNq/eMOJFJLTxeencdEWMHS jiUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830292; x=1772435092; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5lJdfKFYNuLjR953Ng0mcH/dDhHLbnTZ2j5PCnoQPSQ=; b=ESP2fg/NZoPfmfdVnZpaGIanFZ1x23QVRdhptVUw5qrDsF1KBwavZYRYcEXbFjLyCF 2gjDAwscEyuinXpFftYDAiBhOkkJFwPZWSlb8G8J4WTo2kb0eFHlrn7cqCiIO2cYCU6R ozigtIbxPFgtYDjBercM1xhvkfv9ey9Vy21j1aoMhNWfrB2IIoiwMDyeMkZ8mX/N3JYP hk0QhiQYgGbGUMDkiSStlTUEMzIuyoP+QdeIbOjgI1SyrmfHdtrAe88mDrLIAu/K5U4a xObHNpoN+HdVAKFkqcKXGwSaN1dIc9EjsWQv7KLiseANABDOhxdTW5CnlrMIBSASd6XD wavA== X-Forwarded-Encrypted: i=1; AJvYcCVnWr1cX4q+fbxd8jIh39DsaRJExlmTJS+Wl+2j02J40FgJm0gqRFpw+FLew1ipGotQ3erd72RAqvQq7FI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxyej2ydzecmlslqre+cBj0K5Z/cjnHCUMNiS7NkZIUiPQ9lIjV n1FfD6NdJiKSNV1tZpd9rAURNxv3uj3ipg7jJJ+JRqHXeAUIAKCIcjQdDO3Xv8caDcs3yKtuPIq dOFLU1PokYZ8c3ISGcryWDAvg2Q== X-Received: from pjup4.prod.google.com ([2002:a17:90a:d304:b0:34c:2778:11c5]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3d46:b0:354:ad98:7d1c with SMTP id 98e67ed59e1d1-358ae7fd556mr7480246a91.11.1771830291734; Sun, 22 Feb 2026 23:04:51 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:34 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <108d4e27b72480a20e4490d839acadd0b0a2dcea.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 01/10] KVM: guest_memfd: Don't set FGP_ACCESSED when getting folios From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" guest_memfd folios don't care about accessed flags since the memory is unevictable and there is no storage to write back to, hence, cleanup the allocation path by not setting FGP_ACCESSED. Signed-off-by: Ackerley Tng Signed-off-by: Sean Christopherson Acked-by: Vlastimil Babka Acked-by: David Hildenbrand (arm) --- virt/kvm/guest_memfd.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 923c51a3a5256..2df27b6443115 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -126,14 +126,13 @@ static struct folio *kvm_gmem_get_folio(struct inode = *inode, pgoff_t index) * Fast-path: See if folio is already present in mapping to avoid * policy_lookup. */ - folio =3D __filemap_get_folio(inode->i_mapping, index, - FGP_LOCK | FGP_ACCESSED, 0); + folio =3D filemap_lock_folio(inode->i_mapping, index); if (!IS_ERR(folio)) return folio; =20 policy =3D mpol_shared_policy_lookup(&GMEM_I(inode)->policy, index); folio =3D __filemap_get_folio_mpol(inode->i_mapping, index, - FGP_LOCK | FGP_ACCESSED | FGP_CREAT, + FGP_LOCK | FGP_CREAT, mapping_gfp_mask(inode->i_mapping), policy); mpol_cond_put(policy); =20 --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 2550C34AB1D for ; Mon, 23 Feb 2026 07:04:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830296; cv=none; b=b7O3ibaPhTqb5BAt2zZUBM7stoAp0Y8eEkW+hih3mioXz12sINXLEWb2QCGLkfnGDwU6PcKrCFmhS7MjzDJuAbqlPzgWVDwJZbJT8hylhUcvqo2973nkGOCEbrGNbycS8G0wQ/wF2KQY+t6za3xvFtWL2CTd25dtC5afvphgNtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830296; c=relaxed/simple; bh=jh3ZPt1ZHay6YAxI3Ut5XTGeyxbcY4vqjvfPdGHfjT0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=t6O96/p/sikCWsEGjQfv5YjNsGFD9J3f3XHV5iwXjPPA2jIMDtOYkqrb8y1kKdrR/UL/2PzXhItdZLTTZEIru0J/8CqRWLRanNxex4CFHWx7Aa7imoX0nJdJosxJZbCNu5n/yzpYwNcWwPIDKc4wSKtk1VYru/QfGfrJtOjPT9Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fGeXqjTn; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fGeXqjTn" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c6de0bd0896so22535294a12.1 for ; Sun, 22 Feb 2026 23:04:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830293; x=1772435093; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=MlhRSEkvP3hGcg7973jpELqHCKZWjzo4VY3xzNikZZA=; b=fGeXqjTnG/p6rTgKq+0NXmRzXAVLOG+COq+HX6nJpElAssSG8Bg0N4Ljgi3QMfyM77 mjTMrxCUGs9CBC4QhUUfuZpF2cUlhiL5Z8Ow+8Jxg4SfcgKHQwzsE8EmJTRz7uGJe0Wy UT22IN64pPaqzo7YoRH7Wgatsz3nFV6XN7zz9IECFkyNK5j6fr5id13DJsqZGZugCYuV m/obNMpoL4qFbeQ0Pfk9hegYXoaVDMjnLiXu0FTASF2V9Jtg1Wv11R1gHfpW0NPKq6mO 3wu7fMrYjhdWY/HfhyCi4dZwwUa54olkRf8evWVVsYbqQZMGw5YsAvgOlepPlyDAPbbX lidQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830293; x=1772435093; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MlhRSEkvP3hGcg7973jpELqHCKZWjzo4VY3xzNikZZA=; b=CuFAT6uNl3Jx6yKD7/1gK/MPyPwD+7yx+/9/uQQw0JhyRdC0ny43X2604PtRhRIim9 clpDXPSi0s5Waer+iwpPQYLbcRYwmOny/ctCt1KkG+QjeJ4RArCXCJJGkLGEr6ofSiQ+ YE/txEZOSCXWpuxYb9VCjw82abbJfy3jqGm7AJxA7ICPRTOPYCxxF2KF2r/yNfaYTqP7 ZC/Jn4qVQQLYsTka6XvswyyqWs95a6DIwju2BCnE2ddCe9/q36FS1+ibdUpUmg4TCtQe iaGkIzQSWv67RfetXTuqSwMqRx2ob7aaN7D2BjZAcX5U/ykfXHhFjLS7XX/MjOL4z0gI LUeA== X-Forwarded-Encrypted: i=1; AJvYcCWcSjHc6Vr9lIkljlXvEiR348ApUSnK+yGPQD5x0eSaRNc8KxZ9unj5ih529Uz79Je0UlysIZxLvmJaEDI=@vger.kernel.org X-Gm-Message-State: AOJu0YxTeSHoQjH/84x7Spl7QemWm80+2j9OanQsXFEhM+PQnzr64KrY YppXkPoOCDbncjRDLWsDnOz1rhAyM2ZgcZFU77Dk+LlHMg0Ihfz/vtq1JbhEvM13HaAmh5WwVFt ER0SnaFT4FgzawuyhlSg73NOSDQ== X-Received: from pjbjz17.prod.google.com ([2002:a17:90b:14d1:b0:354:7c70:1a9]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:e0a4:b0:393:f002:ff59 with SMTP id adf61e73a8af0-39545e91cd1mr6474154637.19.1771830293252; Sun, 22 Feb 2026 23:04:53 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:35 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <3e363901b177d8c2ae5088cfaeb3862621bbce9b.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 02/10] KVM: guest_memfd: Directly allocate folios with filemap_alloc_folio() From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" __filemap_get_folio_mpol() is parametrized by a bunch of GFP flags, which adds complexity for the reader. Since guest_memfd doesn't meaningfully use any of the other FGP flags, undo that complexity by directly calling filemap_alloc_folio(). Directly calling filemap_alloc_folio() also allows the order of 0 to be explicitly specified, which is the only order guest_memfd supports. This is easier to understand, and removes the chance of anything else being able to unintentionally influence allocated folio size. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 51 +++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 2df27b6443115..2488d7b8f2b0d 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -107,6 +107,39 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, str= uct kvm_memory_slot *slot, return __kvm_gmem_prepare_folio(kvm, slot, index, folio); } =20 +static struct folio *__kvm_gmem_get_folio(struct inode *inode, pgoff_t ind= ex) +{ + /* TODO: Support huge pages. */ + struct mempolicy *policy; + struct folio *folio; + gfp_t gfp; + int ret; + + /* + * Fast-path: See if folio is already present in mapping to avoid + * policy_lookup. + */ + folio =3D filemap_lock_folio(inode->i_mapping, index); + if (!IS_ERR(folio)) + return folio; + + gfp =3D mapping_gfp_mask(inode->i_mapping); + + policy =3D mpol_shared_policy_lookup(&GMEM_I(inode)->policy, index); + folio =3D filemap_alloc_folio(gfp, 0, policy); + mpol_cond_put(policy); + if (!folio) + return ERR_PTR(-ENOMEM); + + ret =3D filemap_add_folio(inode->i_mapping, folio, index, gfp); + if (ret) { + folio_put(folio); + return ERR_PTR(ret); + } + + return folio; +} + /* * Returns a locked folio on success. The caller is responsible for * setting the up-to-date flag before the memory is mapped into the guest. @@ -118,23 +151,11 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, st= ruct kvm_memory_slot *slot, */ static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) { - /* TODO: Support huge pages. */ - struct mempolicy *policy; struct folio *folio; =20 - /* - * Fast-path: See if folio is already present in mapping to avoid - * policy_lookup. - */ - folio =3D filemap_lock_folio(inode->i_mapping, index); - if (!IS_ERR(folio)) - return folio; - - policy =3D mpol_shared_policy_lookup(&GMEM_I(inode)->policy, index); - folio =3D __filemap_get_folio_mpol(inode->i_mapping, index, - FGP_LOCK | FGP_CREAT, - mapping_gfp_mask(inode->i_mapping), policy); - mpol_cond_put(policy); + do { + folio =3D __kvm_gmem_get_folio(inode, index); + } while (PTR_ERR(folio) =3D=3D -EEXIST); =20 /* * External interfaces like kvm_gmem_get_pfn() support dealing --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 7878C34B43F for ; Mon, 23 Feb 2026 07:04:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830296; cv=none; b=f+6rIHj6gRVcbzjPIm92gJIe23bjCO2HQF0Bdr5fbOXX+Q8m1Elybtf8zWiSTPuKt2xbPnCLfMFrUwVU2Yfr4oxRUBkfx+ifNHdcvCKq6AJ//cKPjSOOJyPITr5s+Ghurnvyn2WDzZT8OATBiIAoWooaU3ryYgpDIKVKmLLhbRE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830296; c=relaxed/simple; bh=A7tFVwaDg2WHLYtVEoEto9tIear/R+w5LOCLvvXMBnQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nHp2RwigfqUiOn/GRmWjYjRCgKTFWnIP0cTQQS+Suur1FUZvx420nFLg1upWAE1fOcZgQYgn4RKD7Q+kqIniH5sInXFSRik+hbWi9r3a1JyebF8OF3A64aE6ttaG0KVC8PipUXvQBn15QxZsKI/O1F1QhGhK0bKW/3Itu83pV7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=os+Qowy6; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="os+Qowy6" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-35842aa350fso24845678a91.0 for ; Sun, 22 Feb 2026 23:04:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830295; x=1772435095; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=pw3wTOQIfqz4K2I03v4IFEHinUKdB/xRwD0FbZ6/43I=; b=os+Qowy6NbZZucya5MsR5k364hse9R1HS6gyBMgK466FMpru5jbmPhlbuLxTHAju5F D5v1vWrh86guromec4WsEvL0rHBNLiYWzvwixAUAZsDnfiaQYN/c6Zuwyu671j/G8tTu MonJlhWac3Y3RElDpOvCL6mM+Z9zDA4FsH1axKVULMqtbpEidyrcdb5kVYLjXJ/Um4nj b5uyygwzZvpCDFgj3cuZnq7bUnEy+7OgNMKPtVb9ecNVi5kMUEBmvj6ws11q9RfSMpgT aLUxHrkbhZ3M4mpfba8cL80sZF3A6b7g7byUt8uNSk8uvai0sK6nJDqAtahItgfdDbha 87+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830295; x=1772435095; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pw3wTOQIfqz4K2I03v4IFEHinUKdB/xRwD0FbZ6/43I=; b=KrSspeNmXVq83Y9K+13pru3wObo62q8GILtdv8BichNOREjTgB4W5G1R6rLtkZFWQz Gs2pwMKG7jivGNjD1HmBvnu7w47A8qTKZwviAVBSppKX+3xGSIDv24E8GFS7EyTYPMVF dsI98hwvDUkMAcj4Mdo97zYSxExFOwopJVczAzDitIv9b+4s6f76pB9d85Dp7L3k57Fj dYQHNfNa+Tpp0L2SaIeJfY2BEWXcHfIYHlg6utE3bSzwrdcaAge4y8GDPZazklLgoLvv 5TZSX9Tl1l+VDCDdEyb6hyNkHbjBvqDu/Dht+shzbvWMWn5AYPpb6mn/2pYHiw8bkGT4 3Whg== X-Forwarded-Encrypted: i=1; AJvYcCVQtt8QC6LNn3CmHDIHrQZsOih0geqbXPL77xIMxeBXqNr6iIY3XNGoxnrt0ZYRfp9GVa9iz/hTwmBtOEE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx28CxscBf38Y1OQBTaIA4GG0jEjlWRYxP/U5YFIITo9S3ywMWx eOhkZ3QadvFgXj88Z74sShT7I+nK//MK4TQvMYoorASrr7QEYzEtJfP0zYOYELQe6frbbgcO4p8 0iBezdf+mnDH/lmRkACFuu9Tfbg== X-Received: from pjbjs23.prod.google.com ([2002:a17:90b:1497:b0:34a:c430:bd91]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2550:b0:340:776d:f4ca with SMTP id 98e67ed59e1d1-358ae8d5d3amr5969350a91.26.1771830294754; Sun, 22 Feb 2026 23:04:54 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:36 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <14fcfc2a032b85c7de09e9dd39668c8061742661.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 03/10] mm: truncate: Expose preparation steps for truncate_inode_pages_final() From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Expose preparation steps for truncate_inode_pages_final() to allow preparation steps to be shared by filesystems that want to implement truncation differently. This preparation function will be used by guest_memfd in a later patch. Signed-off-by: Ackerley Tng --- include/linux/mm.h | 1 + mm/truncate.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index f0d5be9dc7368..7f04f1eaab15a 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3732,6 +3732,7 @@ extern unsigned long vm_unmapped_area(struct vm_unmap= ped_area_info *info); void truncate_inode_pages(struct address_space *mapping, loff_t lstart); void truncate_inode_pages_range(struct address_space *mapping, loff_t lsta= rt, uoff_t lend); +void truncate_inode_pages_final_prepare(struct address_space *mapping); void truncate_inode_pages_final(struct address_space *mapping); =20 /* generic vm_area_ops exported for stackable file systems */ diff --git a/mm/truncate.c b/mm/truncate.c index 12467c1bd711e..0e85d5451adbe 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -487,7 +487,9 @@ void truncate_inode_pages(struct address_space *mapping= , loff_t lstart) EXPORT_SYMBOL(truncate_inode_pages); =20 /** - * truncate_inode_pages_final - truncate *all* pages before inode dies + * truncate_inode_pages_final_prepare - Prepare the mapping for final + * truncation but not actually truncate the inode pages. This could be + * used by filesystems which want to add custom truncation of folios. * @mapping: mapping to truncate * * Called under (and serialized by) inode->i_rwsem. @@ -495,7 +497,7 @@ EXPORT_SYMBOL(truncate_inode_pages); * Filesystems have to use this in the .evict_inode path to inform the * VM that this is the final truncate and the inode is going away. */ -void truncate_inode_pages_final(struct address_space *mapping) +void truncate_inode_pages_final_prepare(struct address_space *mapping) { /* * Page reclaim can not participate in regular inode lifetime @@ -516,6 +518,21 @@ void truncate_inode_pages_final(struct address_space *= mapping) xa_lock_irq(&mapping->i_pages); xa_unlock_irq(&mapping->i_pages); } +} +EXPORT_SYMBOL(truncate_inode_pages_final_prepare); + +/** + * truncate_inode_pages_final - truncate *all* pages before inode dies + * @mapping: mapping to truncate + * + * Called under (and serialized by) inode->i_rwsem. + * + * Filesystems have to use this in the .evict_inode path to inform the + * VM that this is the final truncate and the inode is going away. + */ +void truncate_inode_pages_final(struct address_space *mapping) +{ + truncate_inode_pages_final_prepare(mapping); =20 truncate_inode_pages(mapping, 0); } --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 16CA834C81F for ; Mon, 23 Feb 2026 07:04:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830298; cv=none; b=hWSJTqyDKSXc2ghdBSkjsR1AB5T8Ij85lR33QCTSv/BW0OCCSvJ6zEVsm72PIxsZTrQlfA9RyaQufXnLGTuBqSL3S/+DI8k9KkqK/Op5vz5RoicC95bs+8yakNJQuEwjJRxH+DgFXbi7A9r2iZhpA7Z1K3IhQ0hHEKrgOKaX8cY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830298; c=relaxed/simple; bh=5o3tmYQd6rVeF2e0eOelASFd7dC8E+r7apcrcv6Ycco=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=o72tcTA4KDtnRp2eNzjYZnw17dVaTdIgE8ppgJ/oGt7d3kyvwJitgO8d3FWe8W5gJH2bdrY73cGc0uS0DvU7VVZv622jy1CILxocJhGbNqfFZy8w/VNF3oKABv2rdv93DRhqdElcSrwTeSxdMtsfMbZ0BlPl+qYoB3QL9xAZPzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OzK77+qt; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OzK77+qt" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ad44941ea2so25101315ad.1 for ; Sun, 22 Feb 2026 23:04:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830296; x=1772435096; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=9REamna2TtkXRPR+lDCH1E9Zwr056ciH8ECe5GsnKJE=; b=OzK77+qtkjMisRYbly1IqLdmr9vlA32zKEWHgLU9njIWKoTlNk0z50lRT7dQHpaqNm yKDW+vKi7ANS8qROZZB4A0uHpKFVjjhfFll512bst4RgytWpGeHOqADiQB61BJvpvhO6 ZFP1AEzk3W9V2Z9p5DVCqah3VWqZ8BlT2W66ms+5rpXdo4ZbI6Gb0HXX14XxKss4WCPL Oa2na6+Cvg4Ta/ZYTs8SKA7Xy6b/npX6KWRgPs7ESr2yDKbTBohHw5gJ638SH1nYMz73 pV5jxsMGa7k0WL+Va+b4ABCPwifcLCmuArd+TiGeFZ6UOREtemCyLTxWLvOZ+mXq4d44 x9Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830296; x=1772435096; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9REamna2TtkXRPR+lDCH1E9Zwr056ciH8ECe5GsnKJE=; b=gSlFeM/KYCpLZ4dBOe4IzViSlcMlaF9CKjXkkwlHy+FuI9On60YS62nIFzURfOpP99 PD2rqEtm8NCDJuLkffpwB2ibbDmo1cLIVy+a+cjrwEnrB682+qLrXeG4N9Mz65mZNyqM raj2hjfBHUXRj5YC2vbu01nxD1aFUHiLv1lb2EOaPSqddkMLs6FNacCVejEIbaKCyCBo npVNHdeaSg//VtXLPdwiKNdOaP+BfPF1idSpEqqRsB36t9ce8YAS2kzqHMy/Lh9E7KgI fnF3RsxbJIfJgYHM4H3g4bS+0926LgCv9lvAm+CuxDUbOLuOZTpxIp1J9yL2UTuNyqXY qEcg== X-Forwarded-Encrypted: i=1; AJvYcCWZJKkmsw2bwTy1tYOL3p/FFbKY5iuOrjJTvhdK5P9LIrAajEQ5067cd6ujz63H+v50SIqhcloxHKPti4E=@vger.kernel.org X-Gm-Message-State: AOJu0YxmCS/2bVbnzrWs9hOgq9c89UsY64gOeeyJJbVyZIJLzLWISPnq wIsk4u5QUeNc22L2f3T/b/8CqplnLHiHcQI5LE4n1f9REPzSUFCsUK+5PcqDwB3spjCaMqwQSEL INpBJeESAhEJaDdS7aU4lTuJkog== X-Received: from pjst15.prod.google.com ([2002:a17:90b:18f:b0:34c:ab9b:76d2]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:56cb:b0:353:4f7:cc3a with SMTP id 98e67ed59e1d1-358ae6a20c3mr5721991a91.0.1771830296257; Sun, 22 Feb 2026 23:04:56 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:37 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <85a7e5a06f0fff049e5440daea079f0be4c47ff5.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 04/10] KVM: guest_memfd: Implement evict_inode for guest_memfd From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In a later patch, guest_memfd will be using a custom truncation routine. This is a preparatory patch, which implements .evict_inode for guest_memfd, but just performs exactly what would have been done if .evict_inode were not implemented. No functional change intended. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 2488d7b8f2b0d..57dec458bfa77 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -978,11 +978,23 @@ static void kvm_gmem_free_inode(struct inode *inode) kmem_cache_free(kvm_gmem_inode_cachep, GMEM_I(inode)); } =20 +static void kvm_gmem_evict_inode(struct inode *inode) +{ + struct address_space *mapping =3D inode->i_mapping; + + truncate_inode_pages_final_prepare(mapping); + + truncate_inode_pages_range(mapping, 0, inode->i_size); + + clear_inode(inode); +} + static const struct super_operations kvm_gmem_super_operations =3D { .statfs =3D simple_statfs, .alloc_inode =3D kvm_gmem_alloc_inode, .destroy_inode =3D kvm_gmem_destroy_inode, .free_inode =3D kvm_gmem_free_inode, + .evict_inode =3D kvm_gmem_evict_inode, }; =20 static int kvm_gmem_init_fs_context(struct fs_context *fc) --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 867AF34CFC8 for ; Mon, 23 Feb 2026 07:04:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830299; cv=none; b=CD/5NE3gmoIOtrIUjY9HfeaPpHA87LENUrwtaEt315un3SMZJ8Ho5wHXuke9MxL3/3mhoDYsQ1HjLNyzQmclCb6AiL4Fl0uNC+KVJT9jfkTAEQnI63UPVogG4DtnkdIW9uP+FBKSXelNdhEqFao8/I64drpp4YmMK8dvPy6T6EE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830299; c=relaxed/simple; bh=jE9SWcy5OcAaB03+1AxluJ85cRuAv6Q4+ACJtj/hcCM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bbXT1cwLVWUnGjXltErpZEAYXhKVFgNZ723rhuAAFsZQWCjIw4px2IIc0ZKDkJXg30gHkBEuWKpoM/ESFsod3RIgNocw1K5HHS6mA/hJfUI//Q0BH28dSYFu/K/+UVNu1VECI1ZnJvCL6UJXgnaekvVNO2CUJP7qcq8aZi0KjK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=d3osSZSX; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="d3osSZSX" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-824ad5d2098so1599911b3a.1 for ; Sun, 22 Feb 2026 23:04:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830298; x=1772435098; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tZVo84a8gYXfxb6fQudIUthBz+u2OhxnqcpBYF66SVE=; b=d3osSZSXLUzwXIA1idTDrF+7M6NOyz6EO9RGsDR1p1iDWHQ23giSAoW5Aq9FrWYY+F f8fU7E5k3+zaTuOzRtSZiqiAGiLudiOHhAKWTf4tEyxbc2EXpK2J7iY3XSpvJSSxEU5H 2RHt0a0zcwu+TbxmE9ownCbigw1TKukbKwpuosidUt5chrMcnEI8KsYLcXAnHOZwA6UV ogaZTYkIFHMGSgVJcLUZx8kTVFphXVy08ezXR+/I5k7O8W57+13InZqcZZ+tzxGgTgtT aC22sclknyrG+jd/U9P7l0TqGNN2N9H/5/4fHSSV8XMLLreyxxlnAYoCTtgg5qAm2NKV DDXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830298; x=1772435098; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tZVo84a8gYXfxb6fQudIUthBz+u2OhxnqcpBYF66SVE=; b=OBbceXwnv0MEpqOa3JmbGvVsDUwElYFFgYIadIWVNuUhRsJU8aGXcT38cGSvlY00XB /P7Wx7UDmkHaBv1EryMUww0fn7aF7omD1PojShya0FBZERru40NgVlpkTdY7DAn8pBF7 E0ihMOgaSmfqNtpgksJFfRv7IvIajdzqASWTHYLCA6IVBFPTsUCHddZ3nsr6OuyP8pIv GP+yoETlMbp0oBt/ROcSuPL98MOK9uNUiaza3qG9+BmQn2KJTlD8C3XKx6Pzk/Ok3Ost K2ReurMGBzRaB5IMFTTEnOyo51DngbHpcLYpxBpGqcb6Mg9CESDFZCzXTonMcBEZ0T4+ tzIg== X-Forwarded-Encrypted: i=1; AJvYcCXNYwAL2TQNs/eBa3TGmrNKsLRPwcQjKJ1WuWqdHWrM1Q8xWRfySggJgdS+p3gJr9Xjtvm+6L85NjklkbA=@vger.kernel.org X-Gm-Message-State: AOJu0YzrTb1Piaa7GDqWcNIn/We95kDBuItk5e/vzF+bHOdLChr/afEE BXyiHItKhppWDNgKntas6Cz9TPp1oFos5Fo6oOksEG6eNIy3fn+RPVpgQdbKcezpm0Evk+U6pLh ZD0wLKZoQ5kYhTTGad9YaHb5bhg== X-Received: from pfbdf2.prod.google.com ([2002:a05:6a00:4702:b0:824:b56e:1181]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4ac1:b0:823:ad3:4ff4 with SMTP id d2e1a72fcca58-826daa0521bmr4935965b3a.37.1771830297745; Sun, 22 Feb 2026 23:04:57 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:38 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <45a3e4c00f4494c5f91aa1ccd9c400525a55ed45.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 05/10] mm: Export unmap_mapping_folio() for KVM From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" guest_memfd needs a way to unmap a folio from all userspace processes. This is required as part of a folio's truncation process. The function unmap_mapping_folio() provides exactly this functionality. Move its declaration from the internal mm/internal.h to the public include/linux/mm.h and export the symbol. unmap_mapping_folio() will be used by guest_memfd in a later patch to implement a custom truncation function. No functional change intended. Signed-off-by: Ackerley Tng --- include/linux/mm.h | 2 ++ mm/internal.h | 2 -- mm/memory.c | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 7f04f1eaab15a..97fa861364590 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2690,6 +2690,7 @@ extern vm_fault_t handle_mm_fault(struct vm_area_stru= ct *vma, extern int fixup_user_fault(struct mm_struct *mm, unsigned long address, unsigned int fault_flags, bool *unlocked); +void unmap_mapping_folio(struct folio *folio); void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows); void unmap_mapping_range(struct address_space *mapping, @@ -2710,6 +2711,7 @@ static inline int fixup_user_fault(struct mm_struct *= mm, unsigned long address, BUG(); return -EFAULT; } +static inline void unmap_mapping_folio(struct folio *folio) { } static inline void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows) { } static inline void unmap_mapping_range(struct address_space *mapping, diff --git a/mm/internal.h b/mm/internal.h index f35dbcf99a86b..98351be76238b 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -953,7 +953,6 @@ static inline bool free_area_empty(struct free_area *ar= ea, int migratetype) struct anon_vma *folio_anon_vma(const struct folio *folio); =20 #ifdef CONFIG_MMU -void unmap_mapping_folio(struct folio *folio); extern long populate_vma_page_range(struct vm_area_struct *vma, unsigned long start, unsigned long end, int *locked); extern long faultin_page_range(struct mm_struct *mm, unsigned long start, @@ -1131,7 +1130,6 @@ static inline struct file *maybe_unlock_mmap_for_io(s= truct vm_fault *vmf, return fpin; } #else /* !CONFIG_MMU */ -static inline void unmap_mapping_folio(struct folio *folio) { } static inline void mlock_new_folio(struct folio *folio) { } static inline bool need_mlock_drain(int cpu) { return false; } static inline void mlock_drain_local(void) { } diff --git a/mm/memory.c b/mm/memory.c index da360a6eb8a48..983bb25517cb7 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -78,6 +78,7 @@ #include #include #include +#include =20 #include =20 @@ -4244,6 +4245,7 @@ void unmap_mapping_folio(struct folio *folio) last_index, &details); i_mmap_unlock_read(mapping); } +EXPORT_SYMBOL_FOR_KVM(unmap_mapping_folio); =20 /** * unmap_mapping_pages() - Unmap pages from processes. --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 2430934D4EA for ; Mon, 23 Feb 2026 07:04:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830302; cv=none; b=HJXfNVdFqsgL5yNH7yriJrSZFf0iQzGj/kGZGV+3p+U6NIfMUE10WVrdjxqBhHErYJmnAnxzkpc8pZ3biOAiV2pC1SB01dWLzI92nyaTdTvajb7DdAoBVFEVUL0dyYBwtn1YdJJi4L6B9WkXkzL0zVa1sF12TrHDl/kTyUx9kTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830302; c=relaxed/simple; bh=d3UwQnzpg88aX6gn7ACJy409YivRzc8RbQqNjcTrFfw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HrqZVRpZ+P1pL3HYWzQquczwxBqUxw76jKQ8j+VKjNaQz+AH46b3CyBHfO1oV42zOonKKualLs1Z/PjgNbm4iW77KpTmPKHKGOiI8XsMjPKMuWuKLPGm7CvbRpcpX+1nAZcDOr6B74FPoWhd5+SPnpIc/mSG7miuYIGrXmXBdo8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=B6J0k94Y; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="B6J0k94Y" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2a77040ede0so48548065ad.2 for ; Sun, 22 Feb 2026 23:04:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830299; x=1772435099; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=W8EPkBYTIogg/WcIy2FNnZriREPEXUqsGjhG96y07ko=; b=B6J0k94YQxKXI/ATg+nnFkMegMK0+AC3JXFPYcwdbPpJQI6PB8F1FKAxK5PeGupwMD dQJiUUDatgLKphe4YPs2kJyg4BVq8njg69WHA9tn1ejUCn40awFihwD4+fcLibNP/Uj6 tb9oa8JlrGzeqcUhc/n+1Q3oxnmEdSCiQvj+lYLuqUem6hLo0pechZbbnDqqhMnh/QBZ ivocdVkfelgivR5MVabH5RikvqZO4Zlsw38O4Bv6QXxI7oLDATsARVJEK+lA1eIME57O /OiaeQf5FaexRoN2Dx+l9fekkDYwz7TjsM7SK0rThrs8nviZtP4Vliz75osEJNYEittI l9LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830299; x=1772435099; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=W8EPkBYTIogg/WcIy2FNnZriREPEXUqsGjhG96y07ko=; b=cXz1UMoe6zHgmfGx5L/lb+fhmhX0UaivV2P6piyY0fp8tZ5ijievTjYyi1ayOPwW62 ZHH+RP7lnTlFfogylEUzJSlulJfaKXeiBs+13/hzKgMhbyjQpQVoAKwLSpB7wROSnibl Bw56IBUVzwUH8ZyKxYdpcef7ABqntbtFTGeXvF608LrtBsfZkbpwMmrWKy9fB+o1aNAA UO3/hMt33uJ7jsK+Jy8IcVv1ojh7g4J98pShWW0MkXXNvLA/6expG2TXkh6hCPUOzbN/ SYoeTnDOtGImCPhet3Wjeh/TSidTAAbVoPG5nFqdAxItfqskvEDy6aLk5AJIj6kGIGIs aJuQ== X-Forwarded-Encrypted: i=1; AJvYcCX2n3kTiwsd8lp3FhiILZupmf0kc5bBe+tYLQJqjBJdLDt9sLAhjKBUzmiF+q+KrY+wx7wSAo8A6SMHY0Y=@vger.kernel.org X-Gm-Message-State: AOJu0YyW/STDbX1F9MyMdJMWZLOn26YoNmrj9dI4XGrNx2RYwyCWokOJ UsZHSh7Y7ZVwF/oTNA1skqsOrp9mNBiD8rSJ5lTxe53TvXXZhp0wIdeC/VuXQsKCw0/Ijwoo66b +NJeX7N3zaftJegg31JHrE0t5NQ== X-Received: from pjbx30.prod.google.com ([2002:a17:90a:38a1:b0:356:3562:569c]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:248:b0:2a0:a33f:3049 with SMTP id d9443c01a7336-2ad743fe006mr64180505ad.4.1771830299282; Sun, 22 Feb 2026 23:04:59 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:39 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: Subject: [RFC PATCH v1 06/10] mm: filemap: Export filemap_remove_folio() From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Export filemap_remove_folio() for use by KVM. KVM requires this function to remove folios from guest_memfd's filemap. guest_memfd used to rely on higher-level, exported truncation functions. To track memory that is actually allocated (i.e. i_blocks, st_blocks), guest_memfd will need a custom truncation function to do accounting cleanup and will be using filemap_remove_folio() for truncation. Signed-off-by: Ackerley Tng --- mm/filemap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/filemap.c b/mm/filemap.c index ebd75684cb0a7..379d62239fc5f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -49,6 +49,7 @@ #include #include #include +#include =20 #include #include "internal.h" @@ -262,6 +263,7 @@ void filemap_remove_folio(struct folio *folio) =20 filemap_free_folio(mapping, folio); } +EXPORT_SYMBOL_FOR_KVM(filemap_remove_folio); =20 /* * page_cache_delete_batch - delete several folios from page cache --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (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 95D9C34D922 for ; Mon, 23 Feb 2026 07:05:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830304; cv=none; b=rol+5aYIZfs9LBn1iTzLf2mcsviTUWSMI4pdjipN1je5arBLZlEqSXJWvvcrs7dKoPuhzEm7/15n3nJu7Bvyu7zjb80sAZRPMF/3syxkJDYUqwTX8+RDO/snGA29tqEs6q32O0JHTV1IvmI80Haf0diySx/JTjAvhwBX9Mb2xu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830304; c=relaxed/simple; bh=4AzPo53RW7z1u/HbYb3WJwZj9BjSBVUkolJYB1GMnjw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jRjeWota8rLs2Ps6RDiXcEmZIGFAOsAI/xw2MUUfSxeQV1Cw8kKOu61cg645URaeVxIPACejCjHU0h5C3xLZLLN7zPQ3u8c6+Bdd+S6KX9Ut8dqXyGdknjMpd9P7OqL7N8+jO2Jz+LlvgLpeq+/ua6lVeUZ7SyQfgVea7hKbk9M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OdYFkPBf; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OdYFkPBf" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-82436a49592so1674850b3a.2 for ; Sun, 22 Feb 2026 23:05:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830301; x=1772435101; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LofWqILwJgF/mJhvsOWfJxePDPZCogY694ZgccXLsPg=; b=OdYFkPBfQH4Od8qHGMA/2NYywEzCZPCaiMbzPeT2P1O4bPQO6lgX37BBuYJgY+uVdl uZFSi6I89L0ezxGImCQizgqr/u/jSdeaNky8s1uFmNRwaEEkk6Ghfex10g+KS5SigmMu VF/w1xhRRhxa5hEf6Zf7vhTkJa/1xMNFy7II99r8u99fnZXh0nwgHbwz5b3Bc4DOqfwP 4EIPp+IFB3T8ePLrruXguj1Z0+zMU7iUrie/K2wI5LllZLxzrx5AwuZnQxb6BxTKTBMZ BCe+uXR5qX25sl0+edj5NbA6pgXnSA4hjDlcA1hvzp/pUkbAEC+tTmY4gyoswRqnUETK Nehw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830301; x=1772435101; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LofWqILwJgF/mJhvsOWfJxePDPZCogY694ZgccXLsPg=; b=VL9RvorcZA8wlByMkM+0WZ/Nt9Rgy4LiGqckII4Tvhechjzst9uuFu4+gxU/0pmeOJ KRk01n0nkNk07XgEk7d7SrVTm7qB0v45Shr+4Y8bHf53rm+FCoj4yXZkGHPpftewOXeT grvjtVkLqh/iVIPtEonlgzsu5jzygIC7ehZcnkF1TfQqOuPCc1hK80VcmsYd4PordhCo snbbhPIuz53j9PXEv77SpnB+4r5KK1e30oJaQAizR3y/HY1dhV4KpAoGFVRWWtv6I1Cj tFNm4ceUChFTQx29ytfHIkY8kfPMs5ccJKcyMQubhj8/vgmDDDNEp3mJCPTZZHEmateo klYw== X-Forwarded-Encrypted: i=1; AJvYcCV83PeOa8e0ocCRyFAMKFl7I16KqpBFwzbvY+rugYqKkOvHppaQ4M8Ulewdl1F9KZfBZ1M4sB6SjyDLjPA=@vger.kernel.org X-Gm-Message-State: AOJu0Ywjh3/wEchcBRznh3GKh4bdv49cIByIXTvc+WdrpNqcwsxudHsd oPgh0DyG1C8FH4aNzvlRMBZaS00BqFb0Y2vaSqiddYXRrQqqtHUfjleTKQBHsMIMwpsAYHPE9Pp uvf+GMDAu51T9EaZzYkZgmDwbqg== X-Received: from pfwz14.prod.google.com ([2002:a05:6a00:1d8e:b0:7cf:2dad:ff87]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:438e:b0:823:3056:78c6 with SMTP id d2e1a72fcca58-826da9f10bfmr6260281b3a.41.1771830300774; Sun, 22 Feb 2026 23:05:00 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:40 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <976ac2117ed9be6339e898cd80daed8f32b5044e.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 07/10] KVM: guest_memfd: Implement custom truncation function From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement custom truncation function for guest_memfd, and replace calls to truncate_inode_pages_range() with calls to this custom truncation function. The custom truncation function removes a lot of the generality supported by truncate_inode_pages_range() not required by guest_memfd, such as + sub-PAGE_SIZE truncations + Support for writeback In a later patch, guest_memfd use this custom truncation function to handle updating of i_blocks and i_bytes in the inode during truncation. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 43 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 57dec458bfa77..e6c66ab7062b3 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -247,6 +247,45 @@ static void kvm_gmem_invalidate_end(struct inode *inod= e, pgoff_t start, __kvm_gmem_invalidate_end(f, start, end); } =20 +static void kvm_gmem_truncate_folio(struct folio *folio) +{ + folio_lock(folio); + + if (folio_mapped(folio)) + unmap_mapping_folio(folio); + + /* + * guest_memfd doesn't need writeback, skip anything to do with + * writeback and just clear the dirty flag. + */ + folio_clear_dirty(folio); + filemap_remove_folio(folio); + + folio_unlock(folio); +} + +static void kvm_gmem_truncate_range(struct inode *inode, pgoff_t start, + size_t nr_pages) + +{ + struct folio_batch fbatch; + pgoff_t next; + pgoff_t last; + int i; + + last =3D start + nr_pages - 1; + + folio_batch_init(&fbatch); + next =3D start; + while (filemap_get_folios(inode->i_mapping, &next, last, &fbatch)) { + for (i =3D 0; i < folio_batch_count(&fbatch); ++i) + kvm_gmem_truncate_folio(fbatch.folios[i]); + + folio_batch_release(&fbatch); + cond_resched(); + } +} + static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t= len) { pgoff_t start =3D offset >> PAGE_SHIFT; @@ -260,7 +299,7 @@ static long kvm_gmem_punch_hole(struct inode *inode, lo= ff_t offset, loff_t len) =20 kvm_gmem_invalidate_begin(inode, start, end); =20 - truncate_inode_pages_range(inode->i_mapping, offset, offset + len - 1); + kvm_gmem_truncate_range(inode, offset, len >> PAGE_SHIFT); =20 kvm_gmem_invalidate_end(inode, start, end); =20 @@ -984,7 +1023,7 @@ static void kvm_gmem_evict_inode(struct inode *inode) =20 truncate_inode_pages_final_prepare(mapping); =20 - truncate_inode_pages_range(mapping, 0, inode->i_size); + kvm_gmem_truncate_range(inode, 0, inode->i_size >> PAGE_SHIFT); =20 clear_inode(inode); } --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (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 F086134DB4C for ; Mon, 23 Feb 2026 07:05:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830305; cv=none; b=C7n0mp0J6ea4ockLUZko8UXBKq8i7bIUw7qvIvulWG5NmOamfo4KWPwxwV0CyS8/a5ouSa7JTKGiR0kBK2Mi1OTfAReN2+Sn5YGo0lb0SMZSI2vJBtEv6k6bFda8CiIKpD2pkEYuBahmzPzx/K7hD3Q9lcWuaUnAEHW9bD+nNpI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830305; c=relaxed/simple; bh=iDix/n4pVAIJPUoquOFXsOCCYgQvpl1U4uPwq5uCVtY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YpzDwOnXrLyUrNPw3xljw4kuiHtIAviC+K4mxE+I7nw418TKMLPRDZhD0mnK+hvTH/1jgxg8F9rQS9sobBxUsQY2UD7imMQDR9o3X+1JmgInIn47xb3EnZhXjOPyWiwOSMZYW6IxkfcK7uO3GjPYFAOKS8VQOzwhUeraiXi57Os= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MuY13OLN; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MuY13OLN" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c6dde310601so2484545a12.1 for ; Sun, 22 Feb 2026 23:05:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830302; x=1772435102; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=6hvlyYma5WxiXq2U7NpPf+2thlXYSRdGBqdcHHPoogA=; b=MuY13OLNP8i5l78fsXs6uYWDz0YwwH6JTFHPH7y0JSZPd6P9d7idRTM/wp90Gwmk5f 2YYigrVMmTYlBN3H761EN4c7G89J3Q3vbQJ6D4eT0YN650mt/6isjpAE/62+OnAnyX57 vIOA4r1OJXA/pnYhpcWprLgBqV+D8EfE0qHAvFdriu5oJYYAnR6YyfQRS5Ec0DXzUSsI fvkWPm8DVF9Tl2FdvmLdxGm1HcoAy0Hf8ADk1B1QdjZJPfV0yWYFu0D8tXkujyL8U4H2 R8nCA+C5zHevjZOLMm5tOt6cOphSRbz9ky3/hdEaykjXzLD1Z6j7DaVxWGCN33aVxylD XxCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830302; x=1772435102; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6hvlyYma5WxiXq2U7NpPf+2thlXYSRdGBqdcHHPoogA=; b=J8Fl+2UxnMiRmGi5Kow2eLU77ZaRfiSH33w+Jn8logWste6PxaKG9xfFxSJfMAgHT8 hp5VoiRacQ9e7kZ+jgQvywQVrEXqugbGHb79X5727P8tFS+NgZxFegoUKxnenmklTdI4 qNXvSJZL7UR8APMWgWmfCjzUSzjMlgxJ5u7KlxI+QjN/QaoEpEiX1RDoRRSMbFDXhYMt yfgMK5HMwqguKbEzNMKEHuBcJITmZYvSjOslBb60pJwLraRP79VmnDOY2rP+R42VfsWR x/B8AJ22JgJcP3WN8gUp10Z7+rOXNT8wnkP0TT9Kno2gT7pffsm8a8d0W2JaJvYOOaAB IWgQ== X-Forwarded-Encrypted: i=1; AJvYcCUu9OM6OxRXYAMbouYFAi04H6CH+0JLe5tvZ1K0Qgc7z75hX1impatJqSaM/Z1qE40Trs1yVzADoRNEM7Q=@vger.kernel.org X-Gm-Message-State: AOJu0YwXOuLXmUcFewllPO6lbKOL1n8n5l3fUgkjRjZBVH/j6yf2zJ5i iuvdWh2AjXSYWkCXa58XkIdjDeVV5BBpzSdyXLNMVNHv33KQmtL7ub0rDFAiT1rzeOwDb6eXjuT pKrwh21wRAClW8q7ILFLF5nuzYw== X-Received: from pfbgi1.prod.google.com ([2002:a05:6a00:63c1:b0:824:ad09:9204]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1489:b0:81f:4e60:1c6f with SMTP id d2e1a72fcca58-826daab9ee2mr5973915b3a.64.1771830302254; Sun, 22 Feb 2026 23:05:02 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:41 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <0f1f7f4643157eb9612e368961fd05fbcc474935.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 08/10] KVM: guest_memfd: Track amount of memory allocated on inode From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The guest memfd currently does not update the inode's i_blocks and i_bytes count when memory is allocated or freed. Hence, st_blocks returned from fstat() is always 0. Introduce byte accounting for guest memfd inodes. When a new folio is added to the filemap, add the folio's size using inode_add_bytes(). Conversely, when folios are truncated and removed from the mapping, sum their sizes and subtract the total from the inode's byte count via inode_sub_bytes(). With this change, stat.st_blocks for a guest_memfd will correctly report the number of 512-byte blocks allocated to the file, consistent with other memory-based filesystems like tmpfs. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index e6c66ab7062b3..ef7f049dadace 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -137,6 +137,8 @@ static struct folio *__kvm_gmem_get_folio(struct inode = *inode, pgoff_t index) return ERR_PTR(ret); } =20 + inode_add_bytes(inode, folio_size(folio)); + return folio; } =20 @@ -247,10 +249,14 @@ static void kvm_gmem_invalidate_end(struct inode *ino= de, pgoff_t start, __kvm_gmem_invalidate_end(f, start, end); } =20 -static void kvm_gmem_truncate_folio(struct folio *folio) +static size_t kvm_gmem_truncate_folio(struct folio *folio) { + size_t nr_bytes; + folio_lock(folio); =20 + nr_bytes =3D folio_size(folio); + if (folio_mapped(folio)) unmap_mapping_folio(folio); =20 @@ -262,6 +268,8 @@ static void kvm_gmem_truncate_folio(struct folio *folio) filemap_remove_folio(folio); =20 folio_unlock(folio); + + return nr_bytes; } =20 static void kvm_gmem_truncate_range(struct inode *inode, pgoff_t start, @@ -269,6 +277,7 @@ static void kvm_gmem_truncate_range(struct inode *inode= , pgoff_t start, =20 { struct folio_batch fbatch; + size_t nr_bytes =3D 0; pgoff_t next; pgoff_t last; int i; @@ -279,11 +288,13 @@ static void kvm_gmem_truncate_range(struct inode *ino= de, pgoff_t start, next =3D start; while (filemap_get_folios(inode->i_mapping, &next, last, &fbatch)) { for (i =3D 0; i < folio_batch_count(&fbatch); ++i) - kvm_gmem_truncate_folio(fbatch.folios[i]); + nr_bytes +=3D kvm_gmem_truncate_folio(fbatch.folios[i]); =20 folio_batch_release(&fbatch); cond_resched(); } + + inode_sub_bytes(inode, nr_bytes); } =20 static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t= len) --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 D7C5234E779 for ; Mon, 23 Feb 2026 07:05:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830307; cv=none; b=bMHl8X3/HySMd/hdhyzJCqLGELPmOah8XywfPrnpfgThfN/Ssa0Y5RbpnF0gj1dTlHlUbArJ42XWGVBhC+gOsNwYCMbJwtHQJ+13q6E/83fWZfT4GapX4MWOQXvX/Z0bjf4BSoJoPLEHcRPrdSW5UPmUJyVKKe+c8ZTEgpsE9/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830307; c=relaxed/simple; bh=ea4iA5nlwgN+CFTzjyIou+eBChaZJ3B2VNlr77gxrsY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Vl5Ei9mjV+5Yj0yyVCqCwdXVG8T2NXWHEDtcJiURwl/+YW6/iCLw7nNZ+FBbqYV5gRCnd+oZmb5WPsdqGIqRumJOUeOlsE0GP8C9C/YvKUC392eN+3s3BDFKYM3+80aY7SmzhAmqv34lipFJF3KoSnwIdtr5DDi12BxPrQWY/Vc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=je3w3GSQ; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="je3w3GSQ" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-354c0234c1fso3766972a91.2 for ; Sun, 22 Feb 2026 23:05:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830304; x=1772435104; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=29bxp0SrERjlT2nttg/iVluHBRhM/KYKZg8jrRhN0Y0=; b=je3w3GSQoCU+0acbqtQWtBrzOqtRPaSjXu1hWW8XIk9qkdODHGWfe0WpZOjhsYHAL+ k5ahNSwIOQrm+lJH/nmA7bOEjtYYLuLluijZd2Yr0jmd1l1j3kxNAjKqab2Z1123jjY+ wA/n52FEfu/geyjv+Tr1Bm9H5gYf2bjqMWgs9ZU0MU+2144dIJECaBvgp4duskBby2bE QzCZq4SVgq3fusFu1Fpov0//XzkVqNjBQbJgJjYX2DvefE4DC/lPJeoy0HcNWVNi3kje +T3KHXxZprkzY62UH3EboFg2CpXshkaYsaYQU+BKSjrm/OYmy0hZxXbL40lZ/4wEW9Pt khOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830304; x=1772435104; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=29bxp0SrERjlT2nttg/iVluHBRhM/KYKZg8jrRhN0Y0=; b=WLuJ71L8Rz/YC4jxCW2cCbN0Lar4sfGs7kqUptC6SomVpARKtMgJSebJbTWdSoEdXl MyWxUl6LrEXxb121YZrBejygRNmkrFGJdbE1JfwugTC5F9yrcT9pZwXccjtR9Dy1REGL Fg5i1CuZy1Nmk8cYqkKKCXCjXJdOJkk9WD5nGO63umqUO2qBjnNCb2h4+mRmqgetkKMO V6rCnY+75bjQo9q5+0J8p+iGGK0D01HquRehm2K+A+Sw7lqoQRkziYBmOHPHJJ+15ADb BIvjeiEgD4FWtDGecDn0PBgS3xQPnjhUHvyZV/smuNO5BH+ScXHOw7lQs/vR0REXg5V7 rdaQ== X-Forwarded-Encrypted: i=1; AJvYcCX8hqDfLmH+birIbyIf3siqA+Tw1fI2TGkBelD+pdbPYINAK+p6czT1LHq8BE9efNgJT94oZXMS7E/erEI=@vger.kernel.org X-Gm-Message-State: AOJu0YzSChsQSU/gfl2cAqKpPi+tAhQ4aX4Eix34zVxqnz/6BakKPYmA cJeHe04PpV4sf5YJI0tVofa7PS+YLG8CYFiBGcdXe+RgZSwycu9EFJL+huWqjc2MP9uYkVxR2El IQwIdKyUmbA+aud3JCLdza/3lig== X-Received: from pjbtb14.prod.google.com ([2002:a17:90b:53ce:b0:353:3526:238b]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2b8c:b0:356:2c7b:c010 with SMTP id 98e67ed59e1d1-358ae812409mr8015127a91.11.1771830303714; Sun, 22 Feb 2026 23:05:03 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:42 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <3525199b4a04f0054566abe90eb99cdd5b9939e4.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 09/10] KVM: selftests: Wrap fstat() to assert success From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend kvm_syscalls.h to wrap fstat() to assert success. This will be used in the next patch. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/guest_memfd_test.c | 15 +++++---------- .../testing/selftests/kvm/include/kvm_syscalls.h | 2 ++ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing= /selftests/kvm/guest_memfd_test.c index 618c937f3c90f..81387f06e770a 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -212,10 +212,8 @@ static void test_mmap_not_supported(int fd, size_t tot= al_size) static void test_file_size(int fd, size_t total_size) { struct stat sb; - int ret; =20 - ret =3D fstat(fd, &sb); - TEST_ASSERT(!ret, "fstat should succeed"); + kvm_fstat(fd, &sb); TEST_ASSERT_EQ(sb.st_size, total_size); TEST_ASSERT_EQ(sb.st_blksize, page_size); } @@ -303,25 +301,22 @@ static void test_create_guest_memfd_invalid_sizes(str= uct kvm_vm *vm, =20 static void test_create_guest_memfd_multiple(struct kvm_vm *vm) { - int fd1, fd2, ret; + int fd1, fd2; struct stat st1, st2; =20 fd1 =3D __vm_create_guest_memfd(vm, page_size, 0); TEST_ASSERT(fd1 !=3D -1, "memfd creation should succeed"); =20 - ret =3D fstat(fd1, &st1); - TEST_ASSERT(ret !=3D -1, "memfd fstat should succeed"); + kvm_fstat(fd1, &st1); TEST_ASSERT(st1.st_size =3D=3D page_size, "memfd st_size should match req= uested size"); =20 fd2 =3D __vm_create_guest_memfd(vm, page_size * 2, 0); TEST_ASSERT(fd2 !=3D -1, "memfd creation should succeed"); =20 - ret =3D fstat(fd2, &st2); - TEST_ASSERT(ret !=3D -1, "memfd fstat should succeed"); + kvm_fstat(fd2, &st2); TEST_ASSERT(st2.st_size =3D=3D page_size * 2, "second memfd st_size shoul= d match requested size"); =20 - ret =3D fstat(fd1, &st1); - TEST_ASSERT(ret !=3D -1, "memfd fstat should succeed"); + kvm_fstat(fd1, &st1); TEST_ASSERT(st1.st_size =3D=3D page_size, "first memfd st_size should sti= ll match requested size"); TEST_ASSERT(st1.st_ino !=3D st2.st_ino, "different memfd should have diff= erent inode numbers"); =20 diff --git a/tools/testing/selftests/kvm/include/kvm_syscalls.h b/tools/tes= ting/selftests/kvm/include/kvm_syscalls.h index d4e613162bba9..3f039c34e12e0 100644 --- a/tools/testing/selftests/kvm/include/kvm_syscalls.h +++ b/tools/testing/selftests/kvm/include/kvm_syscalls.h @@ -2,6 +2,7 @@ #ifndef SELFTEST_KVM_SYSCALLS_H #define SELFTEST_KVM_SYSCALLS_H =20 +#include #include =20 #define MAP_ARGS0(m,...) @@ -77,5 +78,6 @@ __KVM_SYSCALL_DEFINE(munmap, 2, void *, mem, size_t, size= ); __KVM_SYSCALL_DEFINE(close, 1, int, fd); __KVM_SYSCALL_DEFINE(fallocate, 4, int, fd, int, mode, loff_t, offset, lof= f_t, len); __KVM_SYSCALL_DEFINE(ftruncate, 2, unsigned int, fd, off_t, length); +__KVM_SYSCALL_DEFINE(fstat, 2, int, fd, struct stat *, buf); =20 #endif /* SELFTEST_KVM_SYSCALLS_H */ --=20 2.53.0.345.g96ddfc5eaa-goog From nobody Fri Apr 17 07:44:07 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 DC0CE34EEE7 for ; Mon, 23 Feb 2026 07:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830307; cv=none; b=QYPbdijAJqKK31Y2LDYURQ+yCYAcoSJvM4EE3/+BiDv+KchDNC7occz4gzepJdkGF/EJFk9G3PO69Medi8bm0dnI9K9i5RFc0bfTkrANcEsjRGOS1nB+9YAiVw9eOowyhTTfvc0iy2VRWhrPCoVyY8uhzX341GWzQaibdMqPqP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771830307; c=relaxed/simple; bh=+hky/zfH+OhSR25hMLMVlR53mo5fy/VZJ64ZBtRjY4E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=pDrMOyWD5VusMIQwA2HPjKhrO+mkpCLUkoQtM2kmCL6VYrZKWrbAFJxrCbuy+629mkogUuWFvDN00fhlYo9rhx/sQj33vqZtp+ZuqSGyBfxUzNJo/JW2AjCP4awCdSD/nVpYe9PvLO9FNyKJVMMUurKV5OHfI500NxL5uKzDtCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Lm8TnQtB; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Lm8TnQtB" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-354c72d23dfso28781246a91.2 for ; Sun, 22 Feb 2026 23:05:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771830305; x=1772435105; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=RvAUEDsFvuEub5+rTz247CsIuwfFrabNfZjGGUr2GkQ=; b=Lm8TnQtBUDLln5he1GSE4aQuCI7bPX/bjeCm8cdsgw0g09sVhB6FahV1rfOxdoUHxj /bRaMpqIpbtaIrnsMy/vwgivYMWrZrelUQNsxC6IjbR23ughBs7ItTh9U/xOMoqagpwO /RW9zMnAoyJnH1UIvCZA56SOa5U4sETu8CJvToLt39cdLDi9WpmcdGhbOFrNEWaRPfTb t2/dcTt8iIwg5FGSPWEg6FEHL2yllENZRFhjQavMsGx+owGwZ35vXuHNskOSWgrI9bqr TPMxM3WMJGC6WLfE41gz4I9pLM1+9S/aRq1k+j2cGYx25g08FICs0hkAQOOsmqfDiHYk XtPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771830305; x=1772435105; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RvAUEDsFvuEub5+rTz247CsIuwfFrabNfZjGGUr2GkQ=; b=K/6BeRbh3m5CEwHtY0YRMIawMmSt4RJ+gzdh/R1hUVxZflLBn2rAHiN+tZvRzZ7cY4 JAcKV/wNSLpcZbkoEM6a1VWp29mei+DMKXotlgBWPwDSGL7J9AJJ6rt2vr2c2ugHK43M v4I7Jpgb52W17WFKSitUc6S2XlrgCu9XYEU63IpKsuwiwhVZoiRxo3cSyY0wSZ4l5jGn h2X7eYSo22L3xL/ynBvObFDxaESYE7uQVatNuaDi9Bp5Y3q82+eowkG/uoyTnEpC6CJD z58G2F+9vxDCAhq5nBH5AH3Le/K1nDdoomTQvh0rFLx6pv3IEEnY2S+0L2R/cyLkGKF0 63tg== X-Forwarded-Encrypted: i=1; AJvYcCXb9viaz0QTSv7dWI3o/aErjGlV/OEMWpLFalrgzwaO3S0eCKxxnmca1ANbvSiAJgrCAqQj02oM2vLziUM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4wjdBgpGCldz/f3pGg/PXVtYemsvbgpRAkV6tuiWz6Zbq3Tec amAyiTI0hZY7kGOcWzFHm1yNFP7DyLeqMHskNNGP6mNBEL/f4zAzcRJUJKUxKgxawaK+sbzjOFT GvWlduny1hw2opwZMCkxU0VO76Q== X-Received: from pjl15.prod.google.com ([2002:a17:90b:2f8f:b0:34a:a9d5:99d6]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4987:b0:339:ec9c:b275 with SMTP id 98e67ed59e1d1-358ae7e86a8mr7189605a91.6.1771830305202; Sun, 22 Feb 2026 23:05:05 -0800 (PST) Date: Mon, 23 Feb 2026 07:04:43 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.53.0.345.g96ddfc5eaa-goog Message-ID: <3ddd0a3f248de622221c67d3a16ca058e77e74e5.1771826352.git.ackerleytng@google.com> Subject: [RFC PATCH v1 10/10] KVM: selftests: Test that st_blocks is updated on allocation From: Ackerley Tng To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, willy@infradead.org, pbonzini@redhat.com, shuah@kernel.org, ackerleytng@google.com, seanjc@google.com, shivankg@amd.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, rientjes@google.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, michael.roth@amd.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The st_blocks field reported by fstat should reflect the number of allocated 512-byte blocks for the guest memfd file. Extend the fallocate test to verify that st_blocks is correctly updated when memory is allocated or deallocated via fallocate(FALLOC_FL_PUNCH_HOLE). Add checks after each fallocate call to ensure that st_blocks increases on allocation, decreases when a hole is punched, and is restored when the hole is re-allocated. Also verify that st_blocks remains unchanged for failing fallocate calls. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/guest_memfd_test.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing= /selftests/kvm/guest_memfd_test.c index 81387f06e770a..89228d73fa736 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -218,41 +218,58 @@ static void test_file_size(int fd, size_t total_size) TEST_ASSERT_EQ(sb.st_blksize, page_size); } =20 +static void assert_st_blocks_matches_size(int fd, size_t expected_size) +{ + struct stat sb; + + kvm_fstat(fd, &sb); + TEST_ASSERT_EQ(sb.st_blocks, expected_size / 512); +} + static void test_fallocate(int fd, size_t total_size) { int ret; =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, total_size); TEST_ASSERT(!ret, "fallocate with aligned offset and size should succeed"= ); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, page_size - 1, page_size); TEST_ASSERT(ret, "fallocate with unaligned offset should fail"); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE, total_size, page_size); TEST_ASSERT(ret, "fallocate beginning at total_size should fail"); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE, total_size + page_size, page_s= ize); TEST_ASSERT(ret, "fallocate beginning after total_size should fail"); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, total_size, page_size); TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) at total_size should succeed"); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, total_size + page_size, page_size); TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) after total_size should succeed"= ); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, page_size, page_size - 1); TEST_ASSERT(ret, "fallocate with unaligned size should fail"); + assert_st_blocks_matches_size(fd, total_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, page_size, page_size); TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) with aligned offset and size sho= uld succeed"); + assert_st_blocks_matches_size(fd, total_size - page_size); =20 ret =3D fallocate(fd, FALLOC_FL_KEEP_SIZE, page_size, page_size); TEST_ASSERT(!ret, "fallocate to restore punched hole should succeed"); + assert_st_blocks_matches_size(fd, total_size); } =20 static void test_invalid_punch_hole(int fd, size_t total_size) --=20 2.53.0.345.g96ddfc5eaa-goog