net/rds: Detect need of On-Demand-Paging memory registration
authorHans Westgaard Ry <hans.westgaard.ry@oracle.com>
Wed, 15 Jan 2020 12:43:38 +0000 (14:43 +0200)
committerLeon Romanovsky <leonro@mellanox.com>
Thu, 16 Jan 2020 14:15:25 +0000 (16:15 +0200)
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>
net/rds/rdma.c

index 916f5ec373d8eac066b871f56901d041d0cb189b..eb23c38ce2b341a2961a74ec9f8fce4a042cc573 100644 (file)
@@ -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]);