RDMA/mlx5: Do not allow rereg of a ODP MR
This code is completely broken, the umem of a ODP MR simply cannot be
discarded without a lot more locking, nor can an ODP mkey be blithely
destroyed via destroy_mkey().
Fixes: 6aec21f6a8
("IB/mlx5: Page faults handling infrastructure")
Link: https://lore.kernel.org/r/20191001153821.23621-2-jgg@ziepe.ca
Reviewed-by: Artemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
1cbe866cbc
commit
880505cfef
|
@ -1441,6 +1441,9 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
|
|||
if (!mr->umem)
|
||||
return -EINVAL;
|
||||
|
||||
if (is_odp_mr(mr))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (flags & IB_MR_REREG_TRANS) {
|
||||
addr = virt_addr;
|
||||
len = length;
|
||||
|
@ -1486,8 +1489,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
|
|||
}
|
||||
|
||||
mr->allocated_from_cache = 0;
|
||||
if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
|
||||
mr->live = 1;
|
||||
} else {
|
||||
/*
|
||||
* Send a UMR WQE
|
||||
|
@ -1516,7 +1517,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
|
|||
|
||||
set_mr_fields(dev, mr, npages, len, access_flags);
|
||||
|
||||
update_odp_mr(mr);
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
|
Loading…
Reference in New Issue