From mboxrd@z Thu Jan 1 00:00:00 1970 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 179EA3859C6 for ; Mon, 9 Mar 2026 09:54:12 +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=1773050056; cv=none; b=Zuz5OCgM5dtxT6Bbl7uOvrLyw72h1nqAHiQ+u48RN2/cwDhcxuKqberZNBBR8Lu5r0MGvfzQoUuyxkye21Lx/0egs87ekL9pENQJ/sewAbMmHVU7dYVjmAdZCv3n1Hzc0eESuYMsoYauu/LXaJ0Tg+QdnrSF96VG4PY1J/d30Us= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773050056; c=relaxed/simple; bh=68O4lC98Vin61Vk35g2/k0cZz6nrw+/Eb7DGyikKBoQ=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=JEgEfs+Tp1Ha7RuSOJfvJ/DXavgNu7GdLKj4i0EoQ/LmP4ZS7QgAZvtmg0oV1DVZsu+26VIBYnPQ2TPP+VgZgKfmkH+PSyuNKDj5OTrAldxzYLCbxnc059lfPqqKdCNWAExDXRKM54dnE9mE+7NeEDkJ9r5+i9pvP6D9TLSu//k= 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=mfarBoXx; 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="mfarBoXx" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ae49080364so65431555ad.0 for ; Mon, 09 Mar 2026 02:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773050052; x=1773654852; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=pIf0vYFKMELNG2TTEBOnMZwDB9piTsTF1zoj75pjk5Y=; b=mfarBoXxzLr9cwzacMVTJpjp7xdm9dvlrQ7PNJHlTDuCIqKV4evvsfFAQpQGmMJ/Gd /65YWc9ChTqFJRq5WWSjTDqQ8cpJn5A9wbC25aa8nMeiOUlBn1+nNjl9NZgKt7aSm0tI Tc9EBtM5gT3RRfF0Ickc556L70XG9d61bwKL1nVhr9QrjHhaLLoDc/jJjZwbxvbz69ru 6mCALJ00Ib7PfHGEtmCGld4w+oQG3MWexD5kKE+WtI2+MMh/JUhVZykR83lHP228+GO1 H4GgluuSX00cKxnHb6K3L/xwSDSU3yNs6VfQydGJZrNl+8JrX2i9uefCI2BtCY4YOrZS KiRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773050052; x=1773654852; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=pIf0vYFKMELNG2TTEBOnMZwDB9piTsTF1zoj75pjk5Y=; b=c4C8te5lUz4J5AFbaNtOLBv1iIEsOHEXGl4EmC02WVzy8AvyOtoxql7saiWF46QjWg Jz6spa71sfXHP6KdUFf2J/M1d3YTMBqECMZL38aMGs9Nc+/QpTifB4AX+U4bfoHGZ2QD zYmcfojSshgAj/T2rpRBJ59SH9qhFShS6hfz+ABXSft2fT2r8NCTkwR0prLmZ/SSdN3G e9FzLxz5DkEpiifaxsfKwVvFj8TkUNcJwNDHjssuH2V36OaE0cpsHtaHQqLibxJfU2xB jenLmzNnJXWt/wpXRwApDmr9exgXJ7CfCAh8aiPoV3R0ZZ56suoxknCvhx73V6xUKd91 WH7g== X-Forwarded-Encrypted: i=1; AJvYcCXW/5PxcoMl4k3E9jdaLx2E4beQ5mXiN+E0wtIgHaqYmdwQ5klvsC4faEanyLi/jx3ar98qn3O69czNkWI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9OGtMY/2XgF6o8do7IkCCqgtegBbUwanSDd2vuYmediD2H3pF 1i7ylYdLe6DwddYmoq96JXFC+qKKjyZBIgVFfQQLYMnyoeC2Zz3EcgIdUT2ZZM5dSHBqVpaD4x4 mVd66MoUbfRsaGdv8BciBH8MBNg== X-Received: from plbv8.prod.google.com ([2002:a17:903:44c8:b0:2a3:1bf9:d25]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e80b:b0:2ae:54b2:27d1 with SMTP id d9443c01a7336-2ae82467157mr111432675ad.44.1773050052185; Mon, 09 Mar 2026 02:54:12 -0700 (PDT) Date: Mon, 09 Mar 2026 09:53:51 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAK+YrmkC/x2MywqDMBAAf0X23KV5oC29FvyAXsVDElcNNrFkR QLivzftcQZmDmBKnhge1QGJds9+jQX0pQI3mzgR+qEwKKEaoVSNU6CAvKF9r25hvGk96nqQQkk JJfokGn3+Dzt4tU/oi7SGCW0y0c2/17IHzPfmGilvcJ5fe4EsdoQAAAA= X-Change-Id: 20260225-gmem-st-blocks-733f35d10211 X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1773050050; l=1868; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=68O4lC98Vin61Vk35g2/k0cZz6nrw+/Eb7DGyikKBoQ=; b=ESwVyUWcaPjwEE0yP3Xk8C7LGm2Jq8bAYp6gfzWYbQj40hBFC3hJqHMd7GHOzniNAxF11gI5E q/oaiFZvM1hCbkoIMF3gQqAFMwjT0SDV8AXTcEaNL2gvCD6adqoDxsi X-Mailer: b4 0.14.3 Message-ID: <20260309-gmem-st-blocks-v3-0-815f03d9653e@google.com> Subject: [PATCH RFC v3 0/4] 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" Hi, Currently, guest_memfd doesn't update inode's i_blocks or i_bytes at all. Hence, st_blocks in the struct populated by a userspace fstat() call on a guest_memfd will always be 0. This patch series makes guest_memfd track the amount of memory allocated on an inode, which allows fstat() to accurately report that on requests from userspace. The inode's i_blocks and i_bytes fields are updated when the folio is associated or disassociated from the guest_memfd inode, which are at allocation and truncation times respectively. RFC v3 uses the .invalidate_folio() callback to update accounting in inode fields at truncation time, and sets AS_RELEASE_ALWAYS for guest_memfd mappings to enable .invalidate_folio() for guest_memfd. RFC v3 series is based on kvm-x86/next. + RFC v2: Removed a full custom implementation of .evict_inode for guest_memfd in favor of adding .unaccount_folio callback. + https://lore.kernel.org/all/20260225-gmem-st-blocks-v2-0-87d7098119a9@google.com/T/ + RFC v1: https://lore.kernel.org/all/cover.1771826352.git.ackerleytng@google.com/T/ Signed-off-by: Ackerley Tng --- Ackerley Tng (4): KVM: guest_memfd: Track amount of memory allocated on inode KVM: guest_memfd: Set release always on guest_memfd mappings KVM: selftests: Wrap fstat() to assert success KVM: selftests: Test that st_blocks is updated on allocation tools/testing/selftests/kvm/guest_memfd_test.c | 32 +++++++++++++++------- tools/testing/selftests/kvm/include/kvm_syscalls.h | 2 ++ virt/kvm/guest_memfd.c | 15 ++++++++++ 3 files changed, 39 insertions(+), 10 deletions(-) --- base-commit: 5128b972fb2801ad9aca54d990a75611ab5283a9 change-id: 20260225-gmem-st-blocks-733f35d10211 Best regards, -- Ackerley Tng