From nobody Mon Apr 13 05:38:08 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 BFC29387564 for ; Mon, 9 Mar 2026 09:54:14 +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=1773050057; cv=none; b=gl1PaGopMZyxpgwMAEJuhfeHWYGfwvB1wrwhuwRPg3anAl1hdFwqK3Et6uOUnRYMRuV6L/wY0B8aI9tVAn8BnNLC5kaJcj91Es6uwI6RuijQs97njWPIGGH32hfbcOM5Fr5P6PeEKZmZf2LvpfEjoyiJUlXsO6hTm9FCNlFIvek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050057; c=relaxed/simple; bh=3hqbGU4XpkQVr0yrtZKZ2iPK2V2wp+71XSAAxEJMNCM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dbUiWJ2atRbsoCC9cQpmtoPPVErjGet38i1jTxUOKqalha4D+zgOME21TqCZutE79g0Nx3JGvCLlDgWP5L3vvrLhbUEcZ9v02b4MF0L49y99w3TOf3lWce9BTJ1jBuNDVKaPSEky8FLdTPrSl3kBkpCzLaAswBmDKYXbPJe0Zd8= 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=kdt4F7pZ; 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="kdt4F7pZ" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3597b55adebso5761884a91.2 for ; Mon, 09 Mar 2026 02:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773050054; x=1773654854; 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=wsuu76no6Lr54/H9nY3kYs4+gfz0/Kb8kUE1FtvvYPw=; b=kdt4F7pZS5aMcl0yq358zejj9uUn00c4Lb0OT44KFMFy/PwlxUUZd2rzoYIO/J7QDb qQmnfr+EqZqYSFBrv1AXRJY8uFn2Nc8Yi2Kjh9wHUHIr+QLL4rm8yYaWs/VtAI8n8GsR lOq8Ww3JTLWgZ29YSWvUGtQTxYg+auN8EezHSA11ZlnwxoDj5/EqWuF90hKpmuUcsZnQ WNoa20hJcGy3dcokhz117jbeWbVDitqcV7/cY2l9OS8M6gCNIUh8sRKzPOgRyMBQ7Ry+ gZx2uUZE5YpCMOX/Li62AK/s/G8GGjYVNAdNWOn4DThjiFCJMJNqdWmxYli/YTPY9uEA XKcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773050054; x=1773654854; 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=wsuu76no6Lr54/H9nY3kYs4+gfz0/Kb8kUE1FtvvYPw=; b=vSdiL5UJlUzONkUTDfG6IIutzZxxw1b+QPyRqG+bgZt0Lx+M4z7YxaZRo4usH95Pff j6fwFzNJgVe2XUjXPtDVSFSDqajQ2LX7KBhKOWs+FUXLJVtBtbMRMGyfGWRTrVa2O4Eo P163LRmhdhsd9iNhm+xTDlDq7Jabz+rajv4HpY2Ukc+QhK4VHbxJO5AffKZQpRG724gD t+Z3BpbfzW8rUP6qSCrUJIEhuVD5x7IfBGiO1ps+VJS43l3xFnNlgqD754DbjZmG/BQc fDrUxcSafnzxW3OKeSxt+zAVRjWyWyr2mzdY4hwoKSJmAva9wcMDCuKkYOJWnatbsT9j a2Iw== X-Forwarded-Encrypted: i=1; AJvYcCUzq+s98bGyROELtRhqkeJsKDNyGZXqB3lEUNlcwjtv/9GbRlWYrWA2qmHCH+cz5wAzEKnHuvGLmgRUR7Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyAChVHw3VXnta1cMoqK7FXAwxkGmMb/xRtObGrN0PkKeA7oEZG hfuS3PhWhF7daq3Jhdnaa0wm1es8cxb4/AMF4R/u0vtcYtMEutf+20RReh8eQtxg9FenZJllbAt nYY77irIA8Ww2Mg+lOX0VqzapSQ== X-Received: from pjbsc14.prod.google.com ([2002:a17:90b:510e:b0:359:78a3:a05b]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3b4f:b0:359:9bad:13d2 with SMTP id 98e67ed59e1d1-359be38f4ffmr9958202a91.34.1773050053688; Mon, 09 Mar 2026 02:54:13 -0700 (PDT) Date: Mon, 09 Mar 2026 09:53:52 +0000 In-Reply-To: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1773050050; l=1845; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=3hqbGU4XpkQVr0yrtZKZ2iPK2V2wp+71XSAAxEJMNCM=; b=DckLr8OpAPU7XT4kC4r8g0ArtuhOV9Cd8i5iwr54rk/95ZsNn/2uGsEBnIng3J2LyzzE/zy8c rOJt/vT4O0iC7g4iNwrc8yjDe4BprQNGW/TkdtMSLCgbt5WlFYzydCO X-Mailer: b4 0.14.3 Message-ID: <20260309-gmem-st-blocks-v3-1-815f03d9653e@google.com> Subject: [PATCH RFC v3 1/4] KVM: guest_memfd: Track amount of memory allocated on inode From: Ackerley Tng To: Paolo Bonzini , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , "Matthew Wilcox (Oracle)" , Shuah Khan , Jonathan Corbet , Alexander Viro , Christian Brauner , Jan Kara , seanjc@google.com, rientjes@google.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, shivankg@amd.com, michael.roth@amd.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, Vlastimil Babka Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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. Use the .invalidate_folio() callback to subtract the folio's size from inode fields when folios are truncated and removed from the filemap. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 462c5c5cb602a..77219551056a7 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -136,6 +136,9 @@ static struct folio *kvm_gmem_get_folio(struct inode *i= node, pgoff_t index) mapping_gfp_mask(inode->i_mapping), policy); mpol_cond_put(policy); =20 + if (!IS_ERR(folio)) + inode_add_bytes(inode, folio_size(folio)); + /* * External interfaces like kvm_gmem_get_pfn() support dealing * with hugepages to a degree, but internally, guest_memfd currently @@ -532,10 +535,21 @@ static void kvm_gmem_free_folio(struct folio *folio) } #endif =20 +static void kvm_gmem_invalidate_folio(struct folio *folio, size_t offset, = size_t len) +{ + size_t bytes =3D folio_size(folio); + + WARN_ON_ONCE(offset); + WARN_ON_ONCE(len !=3D bytes); + + inode_sub_bytes(folio_inode(folio), bytes); +} + static const struct address_space_operations kvm_gmem_aops =3D { .dirty_folio =3D noop_dirty_folio, .migrate_folio =3D kvm_gmem_migrate_folio, .error_remove_folio =3D kvm_gmem_error_folio, + .invalidate_folio =3D kvm_gmem_invalidate_folio, #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE .free_folio =3D kvm_gmem_free_folio, #endif --=20 2.53.0.473.g4a7958ca14-goog From nobody Mon Apr 13 05:38:08 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.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 4384E387589 for ; Mon, 9 Mar 2026 09:54:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050058; cv=none; b=JhOhdoxlbVXa41yZFLH6QDdwxhJjL2luU2xX8B9QzaaWGkCh7WnUb2F0dKT14mVR86A9585JhYzKAcPWxYs56uy8njSGNa1S6+57nPlUGIs3vtIMp3G4/RcS5Mv9Se3LwcojCdygJBy3tfLvT1DlM4mN0cGuLilzylcG/T7QZcQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050058; c=relaxed/simple; bh=0dslHDfc8e0m/ec8VD6G1x697Vl+o1F8eHqZCQrHxw8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TSblVe0npOvadkmTS0V5NdpxaVixpzSuEME4H++ck7bIlqvWCKoXqMrgSHDgj1rtQCCFvJTW5lUP/WzKHMALq67lWqrPyv25x4OEZZCwPKiwF4v6YRCQu6A3zG6EIALCwynDfz+9WFL2wHsxZvrHglHxWUe1+lZnxKgP4DQK2pQ= 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=tPYz9xrz; arc=none smtp.client-ip=209.85.214.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="tPYz9xrz" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ae4cdfc468so77814165ad.2 for ; Mon, 09 Mar 2026 02:54:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773050055; x=1773654855; 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=QgiSP3km688q6ojjEduHXzfYAonyqsNdhLOg8lFMsCA=; b=tPYz9xrzAiBA9mLrq+Pxvw7CMRlncd2bEcNV/TK9pRDzsGousLh9yF2h2ESkf99tud wU6aO6lVS12eXMFrM7EfJKdfHCgGO2oZItM9lPcgDmfZMZYI3aihb83/VqzwJDG6MM7J YwKtR1231up7r07dVfTI9fMT4KHaERAiLaE/19oD5GVXXAMmwcLPR5lwUesgRXKS6cOr jJ9fLgIMnXL4DqUZAdN31Sr7drLjOsN3nj6osr7f8QKgKU1oBdhcRglXCCmG65eDi0HN lOScGOvIe9wtIqY9RHhLTTn2uRyldrAxWikvIbGpzWBaPWJA0VnQIBCGJcgKr1dAOUQN yabQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773050055; x=1773654855; 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=QgiSP3km688q6ojjEduHXzfYAonyqsNdhLOg8lFMsCA=; b=JqpjLOyPOSXQv4dJ3sTh9/5jSssz/OERZK97lAUiMb2LcC3GwhdveR7EqnFw8GBdZN u9tU7pmRwV/9JZCT9NPMfsWm/pjXy2OIrghh/+K/iAdfYkqP0k/AZBeCWZc/FGaehTWf Vh/cNLP1qNIii8kQM0qreveD87CEKtpJ8Age9B1GMwul0Cnv3ICB8VKfsG+5JhQfgfUR ojsXo9eFK0+WyjIp7lxu4mUu74ZMw7q4pTTUX2i5g8B3lr3D8d4DfyTQFcrdUz7a8Np9 yjiNIvlDbg/RevK1KQpfXTpUTIS1gkpQlU9AhT0FxG9gtXcw1VZ+EkS1r6QeyQStlaWa O3QA== X-Forwarded-Encrypted: i=1; AJvYcCUB5o8cDqU6K7Wm/JRP+AxZyMyfy1mo3hw7I2wRlsgyKPpsPuz6C6fRiVvNqBdlj587rMq/T+1SIb8acGc=@vger.kernel.org X-Gm-Message-State: AOJu0YwzuP9qwrXzrkfZE5ddBeCI2qwFp+rKhYdlRUMURvSmMLej00c+ 1uaZZkRK34GwL0bisbmTusfgzV+hZlEJokXg8UvYQokCRv0SDNYcV5G69iUI1kaapRvGqbIF5HB OZz8K8/9xN2OQw7sQ3MZc3DYrtg== X-Received: from plef1.prod.google.com ([2002:a17:902:f381:b0:2a5:9a43:6fdf]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:18b:b0:2ae:7fa3:df1c with SMTP id d9443c01a7336-2ae823985a0mr98528365ad.21.1773050055283; Mon, 09 Mar 2026 02:54:15 -0700 (PDT) Date: Mon, 09 Mar 2026 09:53:53 +0000 In-Reply-To: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1773050050; l=820; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=0dslHDfc8e0m/ec8VD6G1x697Vl+o1F8eHqZCQrHxw8=; b=eOCypP2XtIK7WY3YqZd54ElrueSK8F6DJhK/7Y2HZaR12KKA6z53pp3vMBE5jxXzUPXRiI7/S mHsrhIlZsLlCMKxkujWBCQjp/ZE0AdpD8N7mP1eC2QkmTI2K/92Y0+b X-Mailer: b4 0.14.3 Message-ID: <20260309-gmem-st-blocks-v3-2-815f03d9653e@google.com> Subject: [PATCH RFC v3 2/4] KVM: guest_memfd: Set release always on guest_memfd mappings From: Ackerley Tng To: Paolo Bonzini , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , "Matthew Wilcox (Oracle)" , Shuah Khan , Jonathan Corbet , Alexander Viro , Christian Brauner , Jan Kara , seanjc@google.com, rientjes@google.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, shivankg@amd.com, michael.roth@amd.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, Vlastimil Babka Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Set release always on guest_memfd mappings to enable the use of .invalidate_folio, which performs inode accounting for guest_memfd. Signed-off-by: Ackerley Tng Reviewed-by: Jan Kara --- virt/kvm/guest_memfd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 77219551056a7..8246b9fbcf832 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -607,6 +607,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t si= ze, u64 flags) mapping_set_inaccessible(inode->i_mapping); /* Unmovable mappings are supposed to be marked unevictable as well. */ WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); + mapping_set_release_always(inode->i_mapping); =20 GMEM_I(inode)->flags =3D flags; =20 --=20 2.53.0.473.g4a7958ca14-goog From nobody Mon Apr 13 05:38:08 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.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 F1DCC3876CD for ; Mon, 9 Mar 2026 09:54:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050061; cv=none; b=HQQdV6N+aX0/zgTJSR5LYD3T2y/ZU7qMjnwyaPnFYHKY1MJNZDEoTvHIUPJ8Tl1YX8g1ShnmD00Nm3l8loIR3UDjYviCkSXjjS/Sa24VdiCtY36dSQeRjbNXDLswcAyJrgQ+V60bqobuK8nWfUp9wDL1wUEztti74EO8Z3b4xCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050061; c=relaxed/simple; bh=yeoFRB0x0cYTGtPfHobeqkFPIXI/Si+Y5++BAFhp31U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rKPnrlFP1rMzoOKl7uy/6UGATS8CGFV9KtZWHbIgNMVKKSmJcSb0A8g7oXNFgNDWhBGwASzrk+IwmHvQUH2uBBuhUzxSU2Lh2FGLJEoxOkuDpoVN8mdf9RQdW9jRYLrMH96iEE9abnlWQz+djdzNJbdCbqPeYp17PT3Op64dnNY= 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=GvGDC3DC; arc=none smtp.client-ip=209.85.214.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="GvGDC3DC" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ae4e9577ceso383059095ad.1 for ; Mon, 09 Mar 2026 02:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773050057; x=1773654857; 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=6X2ZyGf4duGXbwGrp5sOhQZ4KKFdJaMZm2rOVj/sk3w=; b=GvGDC3DCDyp+M8O8kG2TA1uXQfbBzqiC0NDi74wjtWtUrQYY8pAcdtBDR+mZZGumSi LjatRCd6q81OmdtC/DUL+ZQKtR2lBvpm8sx4rHDAnkcESClA7GuvnhfFDl7ZxJYiMWdP 2djhiwRF1xScKpttDE9Ml2iNkXTWlbanE5dbM42K2ozFCz3fLxFPU1UDdE0LQ7zMbLzN 7sdCU0vDAEsPek+NtJk6SKCkQXtKQQgDyGJk4IPCYlNDX0lQ3TTGjZRvcX86rX8Ce4+P n/b0Oo6EofXztqnF3fA2Zx7g2N7YKrJEXwkHme1OHnJnzFBjmBLgZA9hW+wKhWiSvz0Q /fqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773050057; x=1773654857; 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=6X2ZyGf4duGXbwGrp5sOhQZ4KKFdJaMZm2rOVj/sk3w=; b=wgzKdSHPBxMcgESCqDUNpVrYB/rNXxog6ZvGHJvu9/x/Jwv0iIpPlyOfU14unaDS5C pmLi/wPquHqrCH1RvnBByxi6g34S031sH6cJk09X5Rei9st0d5D8IontEAROR6A/Ivs3 XejYC33JCo2SNOoRizssSV6/OxLpflW4yJcAmyGQOwzwuixkQTnhLKqaEIqQdtz/5tZy 2dYK5vy4oAnJWo544ucaVD2VO0w2gsvGlPUcjqKWwAk0VfLrO1YgPD4ZWWrGdhIUcBH5 phxp1JwzdZu5rirsRtOgs/gSsh6faTfB7QDgYKuIky8FGhyJ8ZdN3vSjyWLqzbr7UQvL n/wA== X-Forwarded-Encrypted: i=1; AJvYcCWPNa/HTHdq4DR/9kHTnO44kowUUQKqxxnjcaxrBZVT5dE1x4jWFYcs4o1/1WUeinRCnn+ZkWSJtjns0fg=@vger.kernel.org X-Gm-Message-State: AOJu0YwkmmomXHTMfSWy2q9fCaTGTShQ5SbHL2ODcqBajzpWxR9YjPvb gJYcIY69pTfH4xIjvDtZfVm9ZIZkxntRZX6NpnCBt9CllrflA7/fhlau271OPVbqX5PXdgEMb6t zNiHw1QSr1evUxZ2gaBt/tlSRCA== X-Received: from pliy13.prod.google.com ([2002:a17:903:3d0d:b0:2ae:3f26:a1c3]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e890:b0:2ae:7f49:8e37 with SMTP id d9443c01a7336-2ae82416de1mr112118785ad.11.1773050056826; Mon, 09 Mar 2026 02:54:16 -0700 (PDT) Date: Mon, 09 Mar 2026 09:53:54 +0000 In-Reply-To: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1773050050; l=3039; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=yeoFRB0x0cYTGtPfHobeqkFPIXI/Si+Y5++BAFhp31U=; b=/7QaGGXJvObuh04yNGHeLFEneGC6nTgx3TASDbD9523g5EzCojJdSnNh5/P0oXkbUD04qd+mq 7mGm6etCRziCzsqHuyNkqm2bt1BC9Gf7zUKg1q8Pm9Ood8vplQeG6EK X-Mailer: b4 0.14.3 Message-ID: <20260309-gmem-st-blocks-v3-3-815f03d9653e@google.com> Subject: [PATCH RFC v3 3/4] KVM: selftests: Wrap fstat() to assert success From: Ackerley Tng To: Paolo Bonzini , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , "Matthew Wilcox (Oracle)" , Shuah Khan , Jonathan Corbet , Alexander Viro , Christian Brauner , Jan Kara , seanjc@google.com, rientjes@google.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, shivankg@amd.com, michael.roth@amd.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, Vlastimil Babka Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 +++++---------- tools/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 ec7644aae999d..638906298ed73 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -270,10 +270,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); } @@ -361,25 +359,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 843c9904c46f6..2266c06347f5d 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,...) @@ -78,5 +79,6 @@ __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(madvise, 3, void *, addr, size_t, length, int, advice= ); +__KVM_SYSCALL_DEFINE(fstat, 2, int, fd, struct stat *, buf); =20 #endif /* SELFTEST_KVM_SYSCALLS_H */ --=20 2.53.0.473.g4a7958ca14-goog From nobody Mon Apr 13 05:38:08 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 C3A3E389470 for ; Mon, 9 Mar 2026 09:54:19 +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=1773050063; cv=none; b=ESWy3+OAil7GjQDtBGeA3n7DxXrXKqNFvFjFV9GJMxLK0DRE2G1B9zwG/mNa4Hl4isYiDCCZRA4O8y8hu5WgOYAlzxTAcyBIE3yEG1YckpJdXlsazHVnAk3hZBv0CbowsYhLNqEkJOR1qy/fs/zD1BkYPXOtz+/Bu/A9y43Yd+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050063; c=relaxed/simple; bh=j//w3WNdHhv+K+KJtK+49w6iacgmz4dTxY4RPng9cDM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nalKBKh4iBBKq4PKRPCiJigwM+HyGd7d+97eZtYqvT8HOnyVYMZeNukKQFjUEaZpL58pWLyg5rke6plVEHtvCN+0uvqqNJ9LEcKcpeI8AHVYR/p8tvGknwNP+GxyJOI3SjkaMfIwPJDCMPE9x9A3QIzed67K276/E8DFz8F94zs= 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=jBoeGbob; 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="jBoeGbob" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-35449510446so10686271a91.0 for ; Mon, 09 Mar 2026 02:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773050059; x=1773654859; 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=/MEyZb/LBxvw6GMpGFDX0oKNKuzzaTQJv09alTwZUHg=; b=jBoeGbobj/yi+M2LQwgl1qx7sArCfTFGvxF5XbkL3jWyqS21RVKROuu050PtaWf7O6 shDPTH3/eDYmksy5EQL/BRMSW66450RgItibmOJHKs2DCVG4xqHii4LUXqdmqMiwjjIi e4W7n3h1f5ZDOBqtkEyMFJgpi893oGhCfImQrwqX1whU92yLIfVK5bLyIqMxrHKI8hQP /sNZ4PSKd9vpzQ1LoQR2C9yzHeAOQSk62x6QcGd6uP1F19LE6c0V1wVJ//FZRipHqJMF P/tj4CJ0OqvB4Ozeb8cQEDp8bGVrgJKsbhWt68X+yTEw/5loh5W90exHu7vue4nRaqy6 Y2RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773050059; x=1773654859; 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=/MEyZb/LBxvw6GMpGFDX0oKNKuzzaTQJv09alTwZUHg=; b=m6Y9DtS/MIuCHoP5RdR67bG7a8cqTb6GQTbyG2WkuqxCm7eLgrxG1TRGFgI51tLVsK /yliYYLl0N4xWmNwabABNV3bI6BiF+4PKvKv3uaCgv4ZGw24ycKOz3uL3vf+5EFkz4n6 8s+L361vn58DBcZOu393kLJoZOo1h60oPBklTqrfRSMo8MiwlGV/0Wh3jWNE7q4BjNta uFhC7Kugg3xfQo6zyWn5ACYEaZOk87EgiD8KzvelYIUww9ftOwv1MdKfZZdhlPuLpC2S O5SASXZg/wf/RqtvzsX49ho2CKllLzoXwfaT+Vbv5ziBSKhHjVFenhYh4I0ZyB/7dC3n jYMQ== X-Forwarded-Encrypted: i=1; AJvYcCWPfMtj7rLMyS6OseTraNpXUFFDdFfEudKGxnGGeOcJsszLjnF+LrpE1Q8PDDXkXEdopZcZ5ogI0WsxUM0=@vger.kernel.org X-Gm-Message-State: AOJu0YzHOUvumHDKUAkoNdxBFQJenFGJsdRyUmNZBTt74cyiQ5WG/0fo Dx7rWVE0zijo3afLW4roRil4LVbd8lAbO+nVYfeGc7/Xay0rB2urVvdI2NbY1s/ei/cx497O8to cov98P7WACSFL/r8jxmyEp0u6YA== X-Received: from pjbcq1.prod.google.com ([2002:a17:90a:f981:b0:359:8ddd:8042]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2b4e:b0:359:8e5e:43ee with SMTP id 98e67ed59e1d1-359be2ee7f0mr9058209a91.19.1773050058833; Mon, 09 Mar 2026 02:54:18 -0700 (PDT) Date: Mon, 09 Mar 2026 09:53:55 +0000 In-Reply-To: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1773050050; l=3384; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=j//w3WNdHhv+K+KJtK+49w6iacgmz4dTxY4RPng9cDM=; b=47SP9RDMCEYTpZusRbsJtAhE6uNyDbx53VwlcxfkhVofBND7pZ84qMDahkOmQWfyUOEuUMi+w 8KtzTKEfucPCalS3OewldUeVaBmw6TDArODKk48Vg/ruFqX9znVvd2L X-Mailer: b4 0.14.3 Message-ID: <20260309-gmem-st-blocks-v3-4-815f03d9653e@google.com> Subject: [PATCH RFC v3 4/4] KVM: selftests: Test that st_blocks is updated on allocation From: Ackerley Tng To: Paolo Bonzini , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , "Matthew Wilcox (Oracle)" , Shuah Khan , Jonathan Corbet , Alexander Viro , Christian Brauner , Jan Kara , seanjc@google.com, rientjes@google.com, rick.p.edgecombe@intel.com, yan.y.zhao@intel.com, fvdl@google.com, jthoughton@google.com, vannapurve@google.com, shivankg@amd.com, michael.roth@amd.com, pratyush@kernel.org, pasha.tatashin@soleen.com, kalyazin@amazon.com, tabba@google.com, Vlastimil Babka Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 638906298ed73..3381a556f397d 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -276,41 +276,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.473.g4a7958ca14-goog