diff options
author | Theodore Ts'o <tytso@mit.edu> | 2011-01-10 12:29:43 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-01-10 12:29:43 -0500 |
commit | 8aefcd557d26d0023a36f9ec5afbf55e59f8f26b (patch) | |
tree | e13143306cd64525cddd2cc2513c448275a1d95a /fs/jbd2/journal.c | |
parent | 353eb83c1422c6326eaab30ce044a179c6018169 (diff) |
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>
Diffstat (limited to 'fs/jbd2/journal.c')
-rw-r--r-- | fs/jbd2/journal.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 2447bd86f801..9e4686900f18 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c | |||
@@ -94,6 +94,7 @@ EXPORT_SYMBOL(jbd2_journal_file_inode); | |||
94 | EXPORT_SYMBOL(jbd2_journal_init_jbd_inode); | 94 | EXPORT_SYMBOL(jbd2_journal_init_jbd_inode); |
95 | EXPORT_SYMBOL(jbd2_journal_release_jbd_inode); | 95 | EXPORT_SYMBOL(jbd2_journal_release_jbd_inode); |
96 | EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate); | 96 | EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate); |
97 | EXPORT_SYMBOL(jbd2_inode_cache); | ||
97 | 98 | ||
98 | static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *); | 99 | static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *); |
99 | static void __journal_abort_soft (journal_t *journal, int errno); | 100 | static void __journal_abort_soft (journal_t *journal, int errno); |
@@ -2286,17 +2287,19 @@ static void __exit jbd2_remove_jbd_stats_proc_entry(void) | |||
2286 | 2287 | ||
2287 | #endif | 2288 | #endif |
2288 | 2289 | ||
2289 | struct kmem_cache *jbd2_handle_cache; | 2290 | struct kmem_cache *jbd2_handle_cache, *jbd2_inode_cache; |
2290 | 2291 | ||
2291 | static int __init journal_init_handle_cache(void) | 2292 | static int __init journal_init_handle_cache(void) |
2292 | { | 2293 | { |
2293 | jbd2_handle_cache = kmem_cache_create("jbd2_journal_handle", | 2294 | jbd2_handle_cache = KMEM_CACHE(jbd2_journal_handle, SLAB_TEMPORARY); |
2294 | sizeof(handle_t), | ||
2295 | 0, /* offset */ | ||
2296 | SLAB_TEMPORARY, /* flags */ | ||
2297 | NULL); /* ctor */ | ||
2298 | if (jbd2_handle_cache == NULL) { | 2295 | if (jbd2_handle_cache == NULL) { |
2299 | printk(KERN_EMERG "JBD: failed to create handle cache\n"); | 2296 | printk(KERN_EMERG "JBD2: failed to create handle cache\n"); |
2297 | return -ENOMEM; | ||
2298 | } | ||
2299 | jbd2_inode_cache = KMEM_CACHE(jbd2_inode, 0); | ||
2300 | if (jbd2_inode_cache == NULL) { | ||
2301 | printk(KERN_EMERG "JBD2: failed to create inode cache\n"); | ||
2302 | kmem_cache_destroy(jbd2_handle_cache); | ||
2300 | return -ENOMEM; | 2303 | return -ENOMEM; |
2301 | } | 2304 | } |
2302 | return 0; | 2305 | return 0; |
@@ -2306,6 +2309,9 @@ static void jbd2_journal_destroy_handle_cache(void) | |||
2306 | { | 2309 | { |
2307 | if (jbd2_handle_cache) | 2310 | if (jbd2_handle_cache) |
2308 | kmem_cache_destroy(jbd2_handle_cache); | 2311 | kmem_cache_destroy(jbd2_handle_cache); |
2312 | if (jbd2_inode_cache) | ||
2313 | kmem_cache_destroy(jbd2_inode_cache); | ||
2314 | |||
2309 | } | 2315 | } |
2310 | 2316 | ||
2311 | /* | 2317 | /* |