summaryrefslogtreecommitdiff
path: root/fs/dlm/memory.c
diff options
context:
space:
mode:
authorAlexander Aring <aahringo@redhat.com>2021-11-30 22:47:18 +0300
committerDavid Teigland <teigland@redhat.com>2021-12-07 21:42:26 +0300
commit6c547f264077ffeb56390f42ed2a07749dd619b2 (patch)
tree3b5c1b9477314281b28b5fc7427cc4e25b110a4b /fs/dlm/memory.c
parentbe3b0400edbf68556cd390125e2c868988616391 (diff)
downloadlinux-6c547f264077ffeb56390f42ed2a07749dd619b2.tar.xz
fs: dlm: memory cache for midcomms hotpath
This patch will introduce a kmem cache for allocating message handles which are needed for midcomms layer to take track of lowcomms messages. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/memory.c')
-rw-r--r--fs/dlm/memory.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c
index 5918f4d39586..8996c6453ad5 100644
--- a/fs/dlm/memory.c
+++ b/fs/dlm/memory.c
@@ -10,32 +10,44 @@
******************************************************************************/
#include "dlm_internal.h"
+#include "midcomms.h"
#include "config.h"
#include "memory.h"
+static struct kmem_cache *mhandle_cache;
static struct kmem_cache *lkb_cache;
static struct kmem_cache *rsb_cache;
int __init dlm_memory_init(void)
{
+ mhandle_cache = dlm_midcomms_cache_create();
+ if (!mhandle_cache)
+ goto out;
+
lkb_cache = kmem_cache_create("dlm_lkb", sizeof(struct dlm_lkb),
__alignof__(struct dlm_lkb), 0, NULL);
if (!lkb_cache)
- return -ENOMEM;
+ goto lkb;
rsb_cache = kmem_cache_create("dlm_rsb", sizeof(struct dlm_rsb),
__alignof__(struct dlm_rsb), 0, NULL);
- if (!rsb_cache) {
- kmem_cache_destroy(lkb_cache);
- return -ENOMEM;
- }
+ if (!rsb_cache)
+ goto rsb;
return 0;
+
+rsb:
+ kmem_cache_destroy(lkb_cache);
+lkb:
+ kmem_cache_destroy(mhandle_cache);
+out:
+ return -ENOMEM;
}
void dlm_memory_exit(void)
{
+ kmem_cache_destroy(mhandle_cache);
kmem_cache_destroy(lkb_cache);
kmem_cache_destroy(rsb_cache);
}
@@ -89,3 +101,12 @@ void dlm_free_lkb(struct dlm_lkb *lkb)
kmem_cache_free(lkb_cache, lkb);
}
+struct dlm_mhandle *dlm_allocate_mhandle(void)
+{
+ return kmem_cache_alloc(mhandle_cache, GFP_NOFS);
+}
+
+void dlm_free_mhandle(struct dlm_mhandle *mhandle)
+{
+ kmem_cache_free(mhandle_cache, mhandle);
+}