提交 052a5f0f 编写于 作者: Y Yu Kuai 提交者: Zheng Zengkai

eulerfs: add kmeme_cache definitions and interfaces

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I40JRR
CVE: NA

--------------------------------------

Total three kmeme_cache:
 - dep_node
 - page
 - inode

Interfaces including init kmem_cache, destroy kmem_cache, alloc and free
object from kmem_cache.
Signed-off-by: NMingkai Dong <dongmingkai1@huawei.com>
Signed-off-by: NYu Kuai <yukuai3@huawei.com>
Reviewed-by: NHou Tao <houtao1@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 99bf76cf
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2021. Huawei Technologies Co., Ltd. All rights reserved.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/fs.h>
#include "euler.h"
#include "kmem_cache.h"
#include "dep.h"
static struct kmem_cache *eufs_dep_node_cachep;
static struct kmem_cache *eufs_page_cachep;
static struct kmem_cache *eufs_inode_cachep;
static void init_once(void *foo)
{
struct eufs_inode_info *vi = foo;
inode_init_once(&vi->vfs_inode);
}
int __init init_page_cache(void)
{
eufs_page_cachep = kmem_cache_create(
"eufs_page_cache", PAGE_SIZE, 0,
(SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD | SLAB_HWCACHE_ALIGN),
NULL);
if (eufs_page_cachep == NULL)
return -ENOMEM;
return 0;
}
int __init init_dep_node_cache(void)
{
eufs_dep_node_cachep = kmem_cache_create(
"eufs_dep_node_cache", sizeof(struct dep_node), 0,
(SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD | SLAB_HWCACHE_ALIGN),
NULL);
if (eufs_dep_node_cachep == NULL)
return -ENOMEM;
return 0;
}
int __init init_inodecache(void)
{
eufs_inode_cachep = kmem_cache_create(
"eufs_inode_cache", sizeof(struct eufs_inode_info), 0,
(SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD), init_once);
if (eufs_inode_cachep == NULL)
return -ENOMEM;
return 0;
}
void destroy_page_cache(void)
{
kmem_cache_destroy(eufs_page_cachep);
}
void destroy_inodecache(void)
{
rcu_barrier();
kmem_cache_destroy(eufs_inode_cachep);
}
void destroy_dep_node_cache(void)
{
kmem_cache_destroy(eufs_dep_node_cachep);
}
void *eufs_zalloc_page(void)
{
return kmem_cache_zalloc(eufs_page_cachep, GFP_NOFS);
}
void *eufs_alloc_page(void)
{
return kmem_cache_alloc(eufs_page_cachep, GFP_NOFS);
}
void eufs_free_page(void *page)
{
kmem_cache_free(eufs_page_cachep, page);
}
struct dep_node *eufs_alloc_dep_node(void)
{
return kmem_cache_alloc(eufs_dep_node_cachep, GFP_NOFS);
}
void eufs_free_dep_node(struct dep_node *dep)
{
kmem_cache_free(eufs_dep_node_cachep, dep);
}
struct eufs_inode_info *eufs_alloc_vi(void)
{
return kmem_cache_alloc(eufs_inode_cachep, GFP_NOFS);
}
void eufs_free_vi(struct eufs_inode_info *vi)
{
kmem_cache_free(eufs_inode_cachep, vi);
}
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2021. Huawei Technologies Co., Ltd. All rights reserved.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef EUFS_KMEM_CACHE_H
#define EUFS_KMEM_CACHE_H
#include <linux/module.h>
extern int init_page_cache(void) __init;
extern int init_dep_node_cache(void) __init;
extern int init_inodecache(void) __init;
extern void destroy_page_cache(void);
extern void destroy_inodecache(void);
extern void destroy_dep_node_cache(void);
extern void *eufs_zalloc_page(void);
extern void *eufs_alloc_page(void);
extern void eufs_free_page(void *page);
extern struct dep_node *eufs_alloc_dep_node(void);
extern void eufs_free_dep_node(struct dep_node *dep);
extern struct eufs_inode_info *eufs_alloc_vi(void);
extern void eufs_free_vi(struct eufs_inode_info *vi);
#endif /* EUFS_KMEM_CACHE_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册