On 2025-04-24 at 3:08, Yan Zhao wrote: > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index 4bb140e7f30d..008061734ac5 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -292,13 +292,14 @@ static struct folio *kvm_gmem_get_folio(struct > inode *inode, pgoff_t index, int > return folio; > } > > -static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t > start, > - pgoff_t end) > +static int kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t > start, > + pgoff_t end, bool need_split) > { > bool flush = false, found_memslot = false; > struct kvm_memory_slot *slot; > struct kvm *kvm = gmem->kvm; > unsigned long index; > + int ret = 0; > > xa_for_each_range(&gmem->bindings, index, slot, start, end - > 1) { > pgoff_t pgoff = slot->gmem.pgoff; > @@ -319,14 +320,23 @@ static void kvm_gmem_invalidate_begin(struct > kvm_gmem *gmem, pgoff_t start, > kvm_mmu_invalidate_begin(kvm); > } > > + if (need_split) { > + ret = kvm_split_boundary_leafs(kvm, > &gfn_range); > + if (ret < 0) > + goto out; > + > + flush |= ret; > + } > flush |= kvm_mmu_unmap_gfn_range(kvm, &gfn_range); > } > > +out: > if (flush) > kvm_flush_remote_tlbs(kvm); > > if (found_memslot) > KVM_MMU_UNLOCK(kvm); > + return 0; Should return ret, not 0