From: Ackerley Tng <[email protected]>

Accept the mapping type filter as a parameter in the invalidation start
helper instead of querying it internally. This allows callers to specify
which mappings (shared, private, or both) should be invalidated.

In the next patch, the conversion process will use this new parameter to
invalidate mappings only when they're different from the target state of
the conversion, i.e. invalidate only shared mappings on a shared to private
conversion and not both.

No functional change intended.

Signed-off-by: Ackerley Tng <[email protected]>
---
 virt/kvm/guest_memfd.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
index e41802944756b..e19de803149c2 100644
--- a/virt/kvm/guest_memfd.c
+++ b/virt/kvm/guest_memfd.c
@@ -192,13 +192,13 @@ static void __kvm_gmem_invalidate_start(struct gmem_file 
*f, pgoff_t start,
 }
 
 static void kvm_gmem_invalidate_start(struct inode *inode, pgoff_t start,
-                                     pgoff_t end)
+                                     pgoff_t end,
+                                     enum kvm_gfn_range_filter filter)
 {
-       enum kvm_gfn_range_filter attr_filter = 
kvm_gmem_get_all_gfns_filter(inode);
        struct gmem_file *f;
 
        kvm_gmem_for_each_file(f, inode)
-               __kvm_gmem_invalidate_start(f, start, end, attr_filter);
+               __kvm_gmem_invalidate_start(f, start, end, filter);
 }
 
 static void __kvm_gmem_invalidate_end(struct gmem_file *f, pgoff_t start,
@@ -224,6 +224,7 @@ static void kvm_gmem_invalidate_end(struct inode *inode, 
pgoff_t start,
 
 static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t len)
 {
+       enum kvm_gfn_range_filter filter = kvm_gmem_get_all_gfns_filter(inode);
        pgoff_t start = offset >> PAGE_SHIFT;
        pgoff_t end = (offset + len) >> PAGE_SHIFT;
 
@@ -233,7 +234,7 @@ static long kvm_gmem_punch_hole(struct inode *inode, loff_t 
offset, loff_t len)
         */
        filemap_invalidate_lock(inode->i_mapping);
 
-       kvm_gmem_invalidate_start(inode, start, end);
+       kvm_gmem_invalidate_start(inode, start, end, filter);
 
        truncate_inode_pages_range(inode->i_mapping, offset, offset + len - 1);
 
@@ -522,6 +523,8 @@ static int kvm_gmem_migrate_folio(struct address_space 
*mapping,
 
 static int kvm_gmem_error_folio(struct address_space *mapping, struct folio 
*folio)
 {
+       struct inode *inode = mapping->host;
+       enum kvm_gfn_range_filter filter;
        pgoff_t start, end;
 
        filemap_invalidate_lock_shared(mapping);
@@ -529,7 +532,8 @@ static int kvm_gmem_error_folio(struct address_space 
*mapping, struct folio *fol
        start = folio->index;
        end = start + folio_nr_pages(folio);
 
-       kvm_gmem_invalidate_start(mapping->host, start, end);
+       filter = kvm_gmem_get_all_gfns_filter(inode);
+       kvm_gmem_invalidate_start(inode, start, end, filter);
 
        /*
         * Do not truncate the range, what action is taken in response to the

-- 
2.55.0.897.gb25b4bd76c-goog



Reply via email to