OSDN Git Service

IB/core: Abort page fault handler silently during owning process exit
authorMoni Shoua <monis@mellanox.com>
Sun, 17 Feb 2019 14:08:24 +0000 (16:08 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 21 Feb 2019 23:32:45 +0000 (16:32 -0700)
It is possible that during a page fault handling, the process that owns
the MR is terminating. The indication for it is failure to get the
task_struct or take reference on the mm_struct. In this case just abort
the page-fault handler with error but without a warning to the kernel log.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/umem_odp.c

index 012044f..6013cf0 100644 (file)
@@ -618,7 +618,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem_odp *umem_odp, u64 user_virt,
         * mmget_not_zero will fail in this case.
         */
        owning_process = get_pid_task(umem_odp->per_mm->tgid, PIDTYPE_PID);
-       if (WARN_ON(!mmget_not_zero(umem_odp->umem.owning_mm))) {
+       if (!owning_process || !mmget_not_zero(owning_mm)) {
                ret = -EINVAL;
                goto out_put_task;
        }