mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
nilfs2: move cleanup code of metadata file from inode routines
Refactor nilfs_clear_inode() and nilfs_i_callback() so that cleanup code or resource deallocation related to metadata file will be moved out to mdt.c. Link: http://lkml.kernel.org/r/1461935747-10380-9-git-send-email-konishi.ryusuke@lab.ntt.co.jp Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
24e20ead2f
commit
2d19961d83
4 changed files with 38 additions and 8 deletions
|
@ -755,7 +755,6 @@ void nilfs_truncate(struct inode *inode)
|
||||||
static void nilfs_clear_inode(struct inode *inode)
|
static void nilfs_clear_inode(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct nilfs_inode_info *ii = NILFS_I(inode);
|
struct nilfs_inode_info *ii = NILFS_I(inode);
|
||||||
struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free resources allocated in nilfs_read_inode(), here.
|
* Free resources allocated in nilfs_read_inode(), here.
|
||||||
|
@ -764,8 +763,8 @@ static void nilfs_clear_inode(struct inode *inode)
|
||||||
brelse(ii->i_bh);
|
brelse(ii->i_bh);
|
||||||
ii->i_bh = NULL;
|
ii->i_bh = NULL;
|
||||||
|
|
||||||
if (mdi && mdi->mi_palloc_cache)
|
if (nilfs_is_metadata_file_inode(inode))
|
||||||
nilfs_palloc_destroy_cache(inode);
|
nilfs_mdt_clear(inode);
|
||||||
|
|
||||||
if (test_bit(NILFS_I_BMAP, &ii->i_state))
|
if (test_bit(NILFS_I_BMAP, &ii->i_state))
|
||||||
nilfs_bmap_clear(ii->i_bmap);
|
nilfs_bmap_clear(ii->i_bmap);
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "segment.h"
|
#include "segment.h"
|
||||||
#include "page.h"
|
#include "page.h"
|
||||||
#include "mdt.h"
|
#include "mdt.h"
|
||||||
|
#include "alloc.h" /* nilfs_palloc_destroy_cache() */
|
||||||
|
|
||||||
#include <trace/events/nilfs2.h>
|
#include <trace/events/nilfs2.h>
|
||||||
|
|
||||||
|
@ -465,6 +466,30 @@ int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nilfs_mdt_clear - do cleanup for the metadata file
|
||||||
|
* @inode: inode of the metadata file
|
||||||
|
*/
|
||||||
|
void nilfs_mdt_clear(struct inode *inode)
|
||||||
|
{
|
||||||
|
struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
|
||||||
|
|
||||||
|
if (mdi->mi_palloc_cache)
|
||||||
|
nilfs_palloc_destroy_cache(inode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nilfs_mdt_destroy - release resources used by the metadata file
|
||||||
|
* @inode: inode of the metadata file
|
||||||
|
*/
|
||||||
|
void nilfs_mdt_destroy(struct inode *inode)
|
||||||
|
{
|
||||||
|
struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
|
||||||
|
|
||||||
|
kfree(mdi->mi_bgl); /* kfree(NULL) is safe */
|
||||||
|
kfree(mdi);
|
||||||
|
}
|
||||||
|
|
||||||
void nilfs_mdt_set_entry_size(struct inode *inode, unsigned entry_size,
|
void nilfs_mdt_set_entry_size(struct inode *inode, unsigned entry_size,
|
||||||
unsigned header_size)
|
unsigned header_size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,6 +67,11 @@ static inline struct nilfs_mdt_info *NILFS_MDT(const struct inode *inode)
|
||||||
return inode->i_private;
|
return inode->i_private;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int nilfs_is_metadata_file_inode(const struct inode *inode)
|
||||||
|
{
|
||||||
|
return inode->i_private != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Default GFP flags using highmem */
|
/* Default GFP flags using highmem */
|
||||||
#define NILFS_MDT_GFP (__GFP_RECLAIM | __GFP_IO | __GFP_HIGHMEM)
|
#define NILFS_MDT_GFP (__GFP_RECLAIM | __GFP_IO | __GFP_HIGHMEM)
|
||||||
|
|
||||||
|
@ -82,6 +87,9 @@ int nilfs_mdt_forget_block(struct inode *, unsigned long);
|
||||||
int nilfs_mdt_fetch_dirty(struct inode *);
|
int nilfs_mdt_fetch_dirty(struct inode *);
|
||||||
|
|
||||||
int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz);
|
int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz);
|
||||||
|
void nilfs_mdt_clear(struct inode *inode);
|
||||||
|
void nilfs_mdt_destroy(struct inode *inode);
|
||||||
|
|
||||||
void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned);
|
void nilfs_mdt_set_entry_size(struct inode *, unsigned, unsigned);
|
||||||
|
|
||||||
int nilfs_mdt_setup_shadow_map(struct inode *inode,
|
int nilfs_mdt_setup_shadow_map(struct inode *inode,
|
||||||
|
|
|
@ -169,12 +169,10 @@ struct inode *nilfs_alloc_inode(struct super_block *sb)
|
||||||
static void nilfs_i_callback(struct rcu_head *head)
|
static void nilfs_i_callback(struct rcu_head *head)
|
||||||
{
|
{
|
||||||
struct inode *inode = container_of(head, struct inode, i_rcu);
|
struct inode *inode = container_of(head, struct inode, i_rcu);
|
||||||
struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
|
|
||||||
|
|
||||||
if (mdi) {
|
if (nilfs_is_metadata_file_inode(inode))
|
||||||
kfree(mdi->mi_bgl); /* kfree(NULL) is safe */
|
nilfs_mdt_destroy(inode);
|
||||||
kfree(mdi);
|
|
||||||
}
|
|
||||||
kmem_cache_free(nilfs_inode_cachep, NILFS_I(inode));
|
kmem_cache_free(nilfs_inode_cachep, NILFS_I(inode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue