#define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt
 
 #include <linux/module.h>
-#include <linux/mempool.h>
 
 #include "rtrs-srv.h"
 #include "rtrs-log.h"
 #define DEFAULT_SESS_QUEUE_DEPTH 512
 #define MAX_HDR_SIZE PAGE_SIZE
 
-/* We guarantee to serve 10 paths at least */
-#define CHUNK_POOL_SZ 10
-
 static struct rtrs_rdma_dev_pd dev_pd;
-static mempool_t *chunk_pool;
 struct class *rtrs_dev_class;
 static struct rtrs_srv_ib_ctx ib_ctx;
 
 
        WARN_ON(refcount_read(&srv->refcount));
        for (i = 0; i < srv->queue_depth; i++)
-               mempool_free(srv->chunks[i], chunk_pool);
+               __free_pages(srv->chunks[i], get_order(max_chunk_size));
        kfree(srv->chunks);
        mutex_destroy(&srv->paths_mutex);
        mutex_destroy(&srv->paths_ev_mutex);
                goto err_free_srv;
 
        for (i = 0; i < srv->queue_depth; i++) {
-               srv->chunks[i] = mempool_alloc(chunk_pool, GFP_KERNEL);
+               srv->chunks[i] = alloc_pages(GFP_KERNEL,
+                                            get_order(max_chunk_size));
                if (!srv->chunks[i])
                        goto err_free_chunks;
        }
 
 err_free_chunks:
        while (i--)
-               mempool_free(srv->chunks[i], chunk_pool);
+               __free_pages(srv->chunks[i], get_order(max_chunk_size));
        kfree(srv->chunks);
 
 err_free_srv:
                       err);
                return err;
        }
-       chunk_pool = mempool_create_page_pool(sess_queue_depth * CHUNK_POOL_SZ,
-                                             get_order(max_chunk_size));
-       if (!chunk_pool)
-               return -ENOMEM;
        rtrs_dev_class = class_create(THIS_MODULE, "rtrs-server");
        if (IS_ERR(rtrs_dev_class)) {
                err = PTR_ERR(rtrs_dev_class);
-               goto out_chunk_pool;
+               goto out_err;
        }
        rtrs_wq = alloc_workqueue("rtrs_server_wq", 0, 0);
        if (!rtrs_wq) {
 
 out_dev_class:
        class_destroy(rtrs_dev_class);
-out_chunk_pool:
-       mempool_destroy(chunk_pool);
-
+out_err:
        return err;
 }
 
 {
        destroy_workqueue(rtrs_wq);
        class_destroy(rtrs_dev_class);
-       mempool_destroy(chunk_pool);
        rtrs_rdma_dev_pd_deinit(&dev_pd);
 }