diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-01-13 11:44:41 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-01-13 11:44:41 +0100 | 
| commit | 1c62448e39285b23b4770aaf46d32368fff990df (patch) | |
| tree | c6c6cf1a80a762a5859bfdaf3941294a47ea8eee /fs/ext4/super.c | |
| parent | 47933ad41a86a4a9b50bed7c9b9bd2ba242aac63 (diff) | |
| parent | 7e22e91102c6b9df7c4ae2168910e19d2bb14cd6 (diff) | |
Merge tag 'v3.13-rc8' into core/locking
Refresh the tree with the latest fixes, before applying new changes.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/ext4/super.c')
| -rw-r--r-- | fs/ext4/super.c | 21 | 
1 files changed, 15 insertions, 6 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index c977f4e4e63..1f7784de05b 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -792,7 +792,7 @@ static void ext4_put_super(struct super_block *sb)  	}  	ext4_es_unregister_shrinker(sbi); -	del_timer(&sbi->s_err_report); +	del_timer_sync(&sbi->s_err_report);  	ext4_release_system_zone(sb);  	ext4_mb_release(sb);  	ext4_ext_release(sb); @@ -3316,11 +3316,19 @@ int ext4_calculate_overhead(struct super_block *sb)  } -static ext4_fsblk_t ext4_calculate_resv_clusters(struct ext4_sb_info *sbi) +static ext4_fsblk_t ext4_calculate_resv_clusters(struct super_block *sb)  {  	ext4_fsblk_t resv_clusters;  	/* +	 * There's no need to reserve anything when we aren't using extents. +	 * The space estimates are exact, there are no unwritten extents, +	 * hole punching doesn't need new metadata... This is needed especially +	 * to keep ext2/3 backward compatibility. +	 */ +	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)) +		return 0; +	/*  	 * By default we reserve 2% or 4096 clusters, whichever is smaller.  	 * This should cover the situations where we can not afford to run  	 * out of space like for example punch hole, or converting @@ -3328,7 +3336,8 @@ static ext4_fsblk_t ext4_calculate_resv_clusters(struct ext4_sb_info *sbi)  	 * allocation would require 1, or 2 blocks, higher numbers are  	 * very rare.  	 */ -	resv_clusters = ext4_blocks_count(sbi->s_es) >> sbi->s_cluster_bits; +	resv_clusters = ext4_blocks_count(EXT4_SB(sb)->s_es) >> +			EXT4_SB(sb)->s_cluster_bits;  	do_div(resv_clusters, 50);  	resv_clusters = min_t(ext4_fsblk_t, resv_clusters, 4096); @@ -4071,10 +4080,10 @@ no_journal:  			 "available");  	} -	err = ext4_reserve_clusters(sbi, ext4_calculate_resv_clusters(sbi)); +	err = ext4_reserve_clusters(sbi, ext4_calculate_resv_clusters(sb));  	if (err) {  		ext4_msg(sb, KERN_ERR, "failed to reserve %llu clusters for " -			 "reserved pool", ext4_calculate_resv_clusters(sbi)); +			 "reserved pool", ext4_calculate_resv_clusters(sb));  		goto failed_mount4a;  	} @@ -4184,7 +4193,7 @@ failed_mount_wq:  	}  failed_mount3:  	ext4_es_unregister_shrinker(sbi); -	del_timer(&sbi->s_err_report); +	del_timer_sync(&sbi->s_err_report);  	if (sbi->s_flex_groups)  		ext4_kvfree(sbi->s_flex_groups);  	percpu_counter_destroy(&sbi->s_freeclusters_counter);  | 
