Re: [PATCH v8 3.2.0-rc5 1/9] uprobes: Install and remove breakpoints.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2011-12-16 at 17:58 +0530, Srikar Dronamraju wrote:
> +static int register_for_each_vma(struct uprobe *uprobe, bool is_register)
> +{
> +       struct list_head try_list;
> +       struct vm_area_struct *vma;
> +       struct address_space *mapping;
> +       struct vma_info *vi, *tmpvi;
> +       struct mm_struct *mm;
> +       loff_t vaddr;
> +       int ret = 0;
> +
> +       mapping = uprobe->inode->i_mapping;
> +       INIT_LIST_HEAD(&try_list);
> +       while ((vi = find_next_vma_info(&try_list, uprobe->offset,
> +                                       mapping, is_register)) != NULL) {
> +               if (IS_ERR(vi)) {
> +                       ret = PTR_ERR(vi);
> +                       break;
> +               }
> +               mm = vi->mm;
> +               down_read(&mm->mmap_sem);
> +               vma = find_vma(mm, (unsigned long)vi->vaddr);
> +               if (!vma || !valid_vma(vma, is_register)) {
> +                       list_del(&vi->probe_list);
> +                       kfree(vi);
> +                       up_read(&mm->mmap_sem);
> +                       mmput(mm);
> +                       continue;
> +               }
> +               vaddr = vma_address(vma, uprobe->offset);
> +               if (vma->vm_file->f_mapping->host != uprobe->inode ||
> +                                               vaddr != vi->vaddr) {
> +                       list_del(&vi->probe_list);
> +                       kfree(vi);
> +                       up_read(&mm->mmap_sem);
> +                       mmput(mm);
> +                       continue;
> +               }
> +
> +               if (is_register)
> +                       ret = install_breakpoint(mm, uprobe, vma, vi->vaddr);
> +               else
> +                       remove_breakpoint(mm, uprobe, vi->vaddr);
> +
> +               up_read(&mm->mmap_sem);
> +               mmput(mm);
> +               if (is_register) {
> +                       if (ret && ret == -EEXIST)
> +                               ret = 0;
> +                       if (ret)
> +                               break;
> +               }

Since you init ret := 0 and remove_breakpoint doesn't change it, this
conditional on is_register is superfluous.

> +       }
> +       list_for_each_entry_safe(vi, tmpvi, &try_list, probe_list) {
> +               list_del(&vi->probe_list);
> +               kfree(vi);
> +       }
> +       return ret;
> +} 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]