f2fs: reuse inode_entry_slab in gc procedure for using slab more effectively
There are two slab cache inode_entry_slab and winode_slab using the same structure as below: struct dir_inode_entry { struct list_head list; /* list head */ struct inode *inode; /* vfs inode pointer */ }; struct inode_entry { struct list_head list; struct inode *inode; }; It's a little waste that the two cache can not share their memory space for each other. So in this patch we remove one redundant winode_slab slab cache, then use more universal name struct inode_entry as remaining data structure name of slab, finally we reuse the inode_entry_slab to store dirty dir item and gc item for more effective. Signed-off-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
#include <trace/events/f2fs.h>
|
||||
|
||||
static struct kmem_cache *ino_entry_slab;
|
||||
static struct kmem_cache *inode_entry_slab;
|
||||
struct kmem_cache *inode_entry_slab;
|
||||
|
||||
/*
|
||||
* We guarantee no failure on the returned page.
|
||||
@@ -673,7 +673,7 @@ fail_no_cp:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int __add_dirty_inode(struct inode *inode, struct dir_inode_entry *new)
|
||||
static int __add_dirty_inode(struct inode *inode, struct inode_entry *new)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||
|
||||
@@ -690,7 +690,7 @@ static int __add_dirty_inode(struct inode *inode, struct dir_inode_entry *new)
|
||||
void update_dirty_page(struct inode *inode, struct page *page)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||
struct dir_inode_entry *new;
|
||||
struct inode_entry *new;
|
||||
int ret = 0;
|
||||
|
||||
if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode))
|
||||
@@ -720,7 +720,7 @@ out:
|
||||
void add_dirty_dir_inode(struct inode *inode)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||
struct dir_inode_entry *new =
|
||||
struct inode_entry *new =
|
||||
f2fs_kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
|
||||
int ret = 0;
|
||||
|
||||
@@ -738,7 +738,7 @@ void add_dirty_dir_inode(struct inode *inode)
|
||||
void remove_dirty_dir_inode(struct inode *inode)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||
struct dir_inode_entry *entry;
|
||||
struct inode_entry *entry;
|
||||
|
||||
if (!S_ISDIR(inode->i_mode))
|
||||
return;
|
||||
@@ -768,7 +768,7 @@ void remove_dirty_dir_inode(struct inode *inode)
|
||||
void sync_dirty_dir_inodes(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
struct list_head *head;
|
||||
struct dir_inode_entry *entry;
|
||||
struct inode_entry *entry;
|
||||
struct inode *inode;
|
||||
retry:
|
||||
if (unlikely(f2fs_cp_error(sbi)))
|
||||
@@ -781,7 +781,7 @@ retry:
|
||||
spin_unlock(&sbi->dir_inode_lock);
|
||||
return;
|
||||
}
|
||||
entry = list_entry(head->next, struct dir_inode_entry, list);
|
||||
entry = list_entry(head->next, struct inode_entry, list);
|
||||
inode = igrab(entry->inode);
|
||||
spin_unlock(&sbi->dir_inode_lock);
|
||||
if (inode) {
|
||||
@@ -1107,8 +1107,8 @@ int __init create_checkpoint_caches(void)
|
||||
sizeof(struct ino_entry));
|
||||
if (!ino_entry_slab)
|
||||
return -ENOMEM;
|
||||
inode_entry_slab = f2fs_kmem_cache_create("f2fs_dirty_dir_entry",
|
||||
sizeof(struct dir_inode_entry));
|
||||
inode_entry_slab = f2fs_kmem_cache_create("f2fs_inode_entry",
|
||||
sizeof(struct inode_entry));
|
||||
if (!inode_entry_slab) {
|
||||
kmem_cache_destroy(ino_entry_slab);
|
||||
return -ENOMEM;
|
||||
|
Reference in New Issue
Block a user