diff options
Diffstat (limited to 'fs/ext2/super.c')
| -rw-r--r-- | fs/ext2/super.c | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 2a188413a2b0..b78caf25f746 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -131,7 +131,10 @@ static void ext2_put_super (struct super_block * sb)  	dquot_disable(sb, -1, DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED); -	ext2_xattr_put_super(sb); +	if (sbi->s_mb_cache) { +		ext2_xattr_destroy_cache(sbi->s_mb_cache); +		sbi->s_mb_cache = NULL; +	}  	if (!(sb->s_flags & MS_RDONLY)) {  		struct ext2_super_block *es = sbi->s_es; @@ -1104,6 +1107,14 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)  		ext2_msg(sb, KERN_ERR, "error: insufficient memory");  		goto failed_mount3;  	} + +#ifdef CONFIG_EXT2_FS_XATTR +	sbi->s_mb_cache = ext2_xattr_create_cache(); +	if (!sbi->s_mb_cache) { +		ext2_msg(sb, KERN_ERR, "Failed to create an mb_cache"); +		goto failed_mount3; +	} +#endif  	/*  	 * set up enough so that it can read an inode  	 */ @@ -1149,6 +1160,8 @@ cantfind_ext2:  			sb->s_id);  	goto failed_mount;  failed_mount3: +	if (sbi->s_mb_cache) +		ext2_xattr_destroy_cache(sbi->s_mb_cache);  	percpu_counter_destroy(&sbi->s_freeblocks_counter);  	percpu_counter_destroy(&sbi->s_freeinodes_counter);  	percpu_counter_destroy(&sbi->s_dirs_counter); @@ -1555,20 +1568,17 @@ MODULE_ALIAS_FS("ext2");  static int __init init_ext2_fs(void)  { -	int err = init_ext2_xattr(); -	if (err) -		return err; +	int err; +  	err = init_inodecache();  	if (err) -		goto out1; +		return err;          err = register_filesystem(&ext2_fs_type);  	if (err)  		goto out;  	return 0;  out:  	destroy_inodecache(); -out1: -	exit_ext2_xattr();  	return err;  } @@ -1576,7 +1586,6 @@ static void __exit exit_ext2_fs(void)  {  	unregister_filesystem(&ext2_fs_type);  	destroy_inodecache(); -	exit_ext2_xattr();  }  MODULE_AUTHOR("Remy Card and others"); | 
