summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Westgaard Ry <hans.westgaard.ry@oracle.com>2020-01-15 13:43:38 +0100
committerLeon Romanovsky <leonro@mellanox.com>2020-01-16 15:15:25 +0100
commitc4c86abb3f9fb3d5bc113fb996298a30ec63e07b (patch)
tree0ddcab9dcd5cca8eb1cc6656e353b8dc6c3efbe6
parentRDMA/mlx5: Fix handling of IOVA != user_va in ODP paths (diff)
downloadlinux-c4c86abb3f9fb3d5bc113fb996298a30ec63e07b.tar.xz
linux-c4c86abb3f9fb3d5bc113fb996298a30ec63e07b.zip
net/rds: Detect need of On-Demand-Paging memory registration
Add code to check if memory intended for RDMA is FS-DAX-memory. RDS will fail with error code EOPNOTSUPP if FS-DAX-memory is detected. Signed-off-by: Hans Westgaard Ry <hans.westgaard.ry@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
-rw-r--r--net/rds/rdma.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index 916f5ec373d8..eb23c38ce2b3 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -156,11 +156,13 @@ void rds_rdma_drop_keys(struct rds_sock *rs)
static int rds_pin_pages(unsigned long user_addr, unsigned int nr_pages,
struct page **pages, int write)
{
+ unsigned int gup_flags = FOLL_LONGTERM;
int ret;
- ret = get_user_pages_fast(user_addr, nr_pages, write ? FOLL_WRITE : 0,
- pages);
+ if (write)
+ gup_flags |= FOLL_WRITE;
+ ret = get_user_pages_fast(user_addr, nr_pages, gup_flags, pages);
if (ret >= 0 && ret < nr_pages) {
while (ret--)
put_page(pages[ret]);