OSDN Git Service

mm/hmm: Only set FAULT_FLAG_ALLOW_RETRY for non-blocking
authorKuehling, Felix <Felix.Kuehling@amd.com>
Fri, 10 May 2019 19:53:24 +0000 (19:53 +0000)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 6 Jun 2019 19:31:41 +0000 (16:31 -0300)
Don't set this flag by default in hmm_vma_do_fault. It is set
conditionally just a few lines below. Setting it unconditionally can lead
to handle_mm_fault doing a non-blocking fault, returning -EBUSY and
unlocking mmap_sem unexpectedly.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
mm/hmm.c

index dce4e70..826816a 100644 (file)
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -328,7 +328,7 @@ struct hmm_vma_walk {
 static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
                            bool write_fault, uint64_t *pfn)
 {
-       unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
+       unsigned int flags = FAULT_FLAG_REMOTE;
        struct hmm_vma_walk *hmm_vma_walk = walk->private;
        struct hmm_range *range = hmm_vma_walk->range;
        struct vm_area_struct *vma = walk->vma;