ext4: dynamically allocate the jbd2_inode in ext4_inode_info as necessary
Replace the jbd2_inode structure (which is 48 bytes) with a pointer and only allocate the jbd2_inode when it is needed --- that is, when the file system has a journal present and the inode has been opened for writing. This allows us to further slim down the ext4_inode_info structure. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
+13
-7
@@ -94,6 +94,7 @@ EXPORT_SYMBOL(jbd2_journal_file_inode);
|
||||
EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
|
||||
EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
|
||||
EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
|
||||
EXPORT_SYMBOL(jbd2_inode_cache);
|
||||
|
||||
static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
|
||||
static void __journal_abort_soft (journal_t *journal, int errno);
|
||||
@@ -2286,17 +2287,19 @@ static void __exit jbd2_remove_jbd_stats_proc_entry(void)
|
||||
|
||||
#endif
|
||||
|
||||
struct kmem_cache *jbd2_handle_cache;
|
||||
struct kmem_cache *jbd2_handle_cache, *jbd2_inode_cache;
|
||||
|
||||
static int __init journal_init_handle_cache(void)
|
||||
{
|
||||
jbd2_handle_cache = kmem_cache_create("jbd2_journal_handle",
|
||||
sizeof(handle_t),
|
||||
0, /* offset */
|
||||
SLAB_TEMPORARY, /* flags */
|
||||
NULL); /* ctor */
|
||||
jbd2_handle_cache = KMEM_CACHE(jbd2_journal_handle, SLAB_TEMPORARY);
|
||||
if (jbd2_handle_cache == NULL) {
|
||||
printk(KERN_EMERG "JBD: failed to create handle cache\n");
|
||||
printk(KERN_EMERG "JBD2: failed to create handle cache\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
jbd2_inode_cache = KMEM_CACHE(jbd2_inode, 0);
|
||||
if (jbd2_inode_cache == NULL) {
|
||||
printk(KERN_EMERG "JBD2: failed to create inode cache\n");
|
||||
kmem_cache_destroy(jbd2_handle_cache);
|
||||
return -ENOMEM;
|
||||
}
|
||||
return 0;
|
||||
@@ -2306,6 +2309,9 @@ static void jbd2_journal_destroy_handle_cache(void)
|
||||
{
|
||||
if (jbd2_handle_cache)
|
||||
kmem_cache_destroy(jbd2_handle_cache);
|
||||
if (jbd2_inode_cache)
|
||||
kmem_cache_destroy(jbd2_inode_cache);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user