RDMA/rtrs-srv: Do not use mempool for page allocation
The mempool is for guaranteed memory allocation during extreme VM load (see the header of mempool.c of the kernel). But rtrs-srv allocates pages only when creating new session. There is no need to use the mempool. With the removal of mempool, rtrs-server no longer need to reserve huge mount of memory, this will avoid error like this: https://lore.kernel.org/lkml/20220620020727.GA3669@xsang-OptiPlex-9020/ Link: https://lore.kernel.org/r/20220712103113.617754-6-haris.iqbal@ionos.com Reported-by: kernel test robot <oliver.sang@intel.com> Signed-off-by: Gioh Kim <gi-oh.kim@ionos.com> Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com> Acked-by: Guoqing Jiang <guoqing.jiang@linux.dev> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
c14adff285
commit
46195de38a
|
@ -11,7 +11,6 @@
|
|||
#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"
|
||||
|
@ -26,11 +25,7 @@ MODULE_LICENSE("GPL");
|
|||
#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;
|
||||
|
||||
|
@ -1358,7 +1353,7 @@ static void free_srv(struct rtrs_srv_sess *srv)
|
|||
|
||||
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);
|
||||
|
@ -1411,7 +1406,8 @@ static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
|
|||
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;
|
||||
}
|
||||
|
@ -1424,7 +1420,7 @@ static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
|
|||
|
||||
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:
|
||||
|
@ -2273,14 +2269,10 @@ static int __init rtrs_server_init(void)
|
|||
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) {
|
||||
|
@ -2292,9 +2284,7 @@ static int __init rtrs_server_init(void)
|
|||
|
||||
out_dev_class:
|
||||
class_destroy(rtrs_dev_class);
|
||||
out_chunk_pool:
|
||||
mempool_destroy(chunk_pool);
|
||||
|
||||
out_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -2302,7 +2292,6 @@ static void __exit rtrs_server_exit(void)
|
|||
{
|
||||
destroy_workqueue(rtrs_wq);
|
||||
class_destroy(rtrs_dev_class);
|
||||
mempool_destroy(chunk_pool);
|
||||
rtrs_rdma_dev_pd_deinit(&dev_pd);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue