On Tue, 10 Feb 2009 18:36:02 -0500 Chuck Ebbert <cebbert@xxxxxxxxxx> wrote: > On Sat, 31 Jan 2009 00:25:39 -0500 > "Theodore Ts'o" <tytso@xxxxxxx> wrote: > > > I've updated the ext4 backport branches on the ext4 git tree: > > > > git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git > > http://git.kernel.org/?p=linux/kernel/git/tytso/ext4.git > > > > The for-stable branch is branched off of 2.6.28.2, and has a candidate > > set of patches to be included in the next stable release. The > > for-stable-2.6.27 branch is branched off of 2.6.27.13. > > > > I'm more confident with the 2.6.28 stable candidate than the 2.6.27 > > stable candidates at the moment, but given that we just missed the > > 2.6.27.14 and 2.6.28.3 release cycles, that should give us plenty of > > time to test the patches. > > > > .27 has a bug and one patch got merged in .27.14... > > > > > mainline 2.6.28 2.6.27 > > commit-description > > ------------------------------------------------------------------------- > > c894058d ----- 71ae3e25 > > ext4: Use an rbtree for tracking blocks freed during transaction. > > > > The chunk that creates the ext4_free_block_extents cache is misapplied: it > ended up at the end of ext4_mb_use_preallocated() instead of > init_ext4_mballoc(). The null cache pointer then causes oopses when trying > to delete files. > Here's the fix for that: Move init of the ext4_free_block_extents cache to the right place. Original patch that misapplies this is at: http://git.kernel.org/?p=linux/kernel/git/tytso/ext4.git;a=commitdiff;h=71ae3e256af82b77100bd2e7392fd510aca0b8b9 "ext4: Use an rbtree for tracking blocks freed during transaction." Signed-off-by: Chuck Ebbert <cebbert@xxxxxxxxxx> Index: linux-2.6.27.noarch/fs/ext4/mballoc.c =================================================================== --- linux-2.6.27.noarch.orig/fs/ext4/mballoc.c +++ linux-2.6.27.noarch/fs/ext4/mballoc.c @@ -3060,6 +3060,16 @@ int __init init_ext4_mballoc(void) kmem_cache_destroy(ext4_pspace_cachep); return -ENOMEM; } + + ext4_free_ext_cachep = + kmem_cache_create("ext4_free_block_extents", + sizeof(struct ext4_free_data), + 0, SLAB_RECLAIM_ACCOUNT, NULL); + if (ext4_free_ext_cachep == NULL) { + kmem_cache_destroy(ext4_pspace_cachep); + kmem_cache_destroy(ext4_ac_cachep); + return -ENOMEM; + } #ifdef CONFIG_PROC_FS proc_root_ext4 = proc_mkdir("fs/ext4", NULL); if (proc_root_ext4 == NULL) @@ -3597,15 +3607,6 @@ ext4_mb_use_preallocated(struct ext4_all return 1; } - ext4_free_ext_cachep = - kmem_cache_create("ext4_free_block_extents", - sizeof(struct ext4_free_data), - 0, SLAB_RECLAIM_ACCOUNT, NULL); - if (ext4_free_ext_cachep == NULL) { - kmem_cache_destroy(ext4_pspace_cachep); - kmem_cache_destroy(ext4_ac_cachep); - return -ENOMEM; - } return 0; } -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html