uprobe->flags |= UPROBE_COPY_INSN;
        }
 
-       /*
-        * Ideally, should be updating the probe count after the breakpoint
-        * has been successfully inserted. However a thread could hit the
-        * breakpoint we just inserted even before the probe count is
-        * incremented. If this is the first breakpoint placed, breakpoint
-        * notifier might ignore uprobes and pass the trap to the thread.
-        * Hence increment before and decrement on failure.
-        */
-       atomic_inc(&mm->uprobes_state.count);
        ret = set_swbp(&uprobe->arch, mm, vaddr);
-       if (ret)
-               atomic_dec(&mm->uprobes_state.count);
 
        return ret;
 }
 static void
 remove_breakpoint(struct uprobe *uprobe, struct mm_struct *mm, unsigned long vaddr)
 {
-       if (!set_orig_insn(&uprobe->arch, mm, vaddr, true))
-               atomic_dec(&mm->uprobes_state.count);
+       set_orig_insn(&uprobe->arch, mm, vaddr, true);
 }
 
 /*
 
                                if (!is_swbp_at_addr(vma->vm_mm, vaddr))
                                        continue;
-
-                               /*
-                                * Unable to insert a breakpoint, but
-                                * breakpoint lies underneath. Increment the
-                                * probe count.
-                                */
-                               atomic_inc(&vma->vm_mm->uprobes_state.count);
                        }
 
                        if (!ret)
 
        mutex_unlock(uprobes_mmap_hash(inode));
 
-       if (ret)
-               atomic_sub(count, &vma->vm_mm->uprobes_state.count);
-
        return ret;
 }
 
        if (!atomic_read(&vma->vm_mm->mm_users)) /* called by mmput() ? */
                return;
 
-       if (!atomic_read(&vma->vm_mm->uprobes_state.count))
-               return;
-
        inode = vma->vm_file->f_mapping->host;
        if (!inode)
                return;
        build_probe_list(inode, vma, start, end, &tmp_list);
 
        list_for_each_entry_safe(uprobe, u, &tmp_list, pending_list) {
-               unsigned long vaddr = offset_to_vaddr(vma, uprobe->offset);
-               /*
-                * An unregister could have removed the probe before
-                * unmap. So check before we decrement the count.
-                */
-               if (is_swbp_at_addr(vma->vm_mm, vaddr) == 1)
-                       atomic_dec(&vma->vm_mm->uprobes_state.count);
                put_uprobe(uprobe);
        }
        mutex_unlock(uprobes_mmap_hash(inode));
 void uprobe_reset_state(struct mm_struct *mm)
 {
        mm->uprobes_state.xol_area = NULL;
-       atomic_set(&mm->uprobes_state.count, 0);
 }
 
 /*
 {
        struct uprobe_task *utask;
 
-       if (!current->mm || !atomic_read(¤t->mm->uprobes_state.count))
-               /* task is currently not uprobed */
+       if (!current->mm)
                return 0;
 
        utask = current->utask;