EM( NUMAB_SKIP_SHARED_RO,               "shared_ro" )   \
        EM( NUMAB_SKIP_INACCESSIBLE,            "inaccessible" )        \
        EM( NUMAB_SKIP_SCAN_DELAY,              "scan_delay" )  \
-       EMe(NUMAB_SKIP_PID_INACTIVE,            "pid_inactive" )
+       EM( NUMAB_SKIP_PID_INACTIVE,            "pid_inactive" )        \
+       EMe(NUMAB_SKIP_IGNORE_PID,              "ignore_pid_inactive" )
 
 /* Redefine for export. */
 #undef EM
 
        p->mm->numa_scan_offset = 0;
 }
 
-static bool vma_is_accessed(struct vm_area_struct *vma)
+static bool vma_is_accessed(struct mm_struct *mm, struct vm_area_struct *vma)
 {
        unsigned long pids;
        /*
                return true;
 
        pids = vma->numab_state->pids_active[0] | vma->numab_state->pids_active[1];
-       return test_bit(hash_32(current->pid, ilog2(BITS_PER_LONG)), &pids);
+       if (test_bit(hash_32(current->pid, ilog2(BITS_PER_LONG)), &pids))
+               return true;
+
+       /*
+        * Complete a scan that has already started regardless of PID access, or
+        * some VMAs may never be scanned in multi-threaded applications:
+        */
+       if (mm->numa_scan_offset > vma->vm_start) {
+               trace_sched_skip_vma_numa(mm, vma, NUMAB_SKIP_IGNORE_PID);
+               return true;
+       }
+
+       return false;
 }
 
 #define VMA_PID_RESET_PERIOD (4 * sysctl_numa_balancing_scan_delay)
                }
 
                /* Do not scan the VMA if task has not accessed */
-               if (!vma_is_accessed(vma)) {
+               if (!vma_is_accessed(mm, vma)) {
                        trace_sched_skip_vma_numa(mm, vma, NUMAB_SKIP_PID_INACTIVE);
                        continue;
                }