atomic_t s_bal_breaks; /* too long searches */
atomic_t s_bal_2orders; /* 2^order hits */
+ /* cX loop didn't find blocks */
-+ atomic64_t s_bal_cX_failed[3];
++ atomic64_t s_bal_cX_failed[4];
+ atomic64_t s_bal_cX_skipped[3];
spinlock_t s_bal_lock;
unsigned long s_mb_buddies_generated;
}
if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND &&
-@@ -2510,6 +2543,93 @@ const struct file_operations ext4_seq_mb_last_group_fops = {
+@@ -2510,6 +2543,96 @@ const struct file_operations ext4_seq_mb_last_group_fops = {
.write = ext4_mb_last_group_write,
};
+ seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks));
+ seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks));
+
-+ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c0_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2]));
-+ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3]));
++ seq_printf(seq, "\tskipped_c0_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0]));
-+ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[1]));
-+ seq_printf(seq, "\tskipped_c3_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[2]));
+ seq_printf(seq, "\tbuddies_generated: %lu\n",
+ sbi->s_mb_buddies_generated);
+ atomic64_set(&sbi->s_bal_cX_failed[0], 0),
+ atomic64_set(&sbi->s_bal_cX_failed[1], 0),
+ atomic64_set(&sbi->s_bal_cX_failed[2], 0);
++ atomic64_set(&sbi->s_bal_cX_failed[3], 0);
+
+ atomic64_set(&sbi->s_bal_cX_skipped[0], 0),
+ atomic64_set(&sbi->s_bal_cX_skipped[1], 0),
/*
* The default group preallocation is 512, which for 4k block
* sizes translates to 2 megabytes. However for bigalloc file
-@@ -2922,6 +3046,16 @@ int ext4_mb_release(struct super_block *sb)
+@@ -2922,6 +3046,17 @@ int ext4_mb_release(struct super_block *sb)
atomic_read(&sbi->s_bal_allocated),
atomic_read(&sbi->s_bal_reqs),
atomic_read(&sbi->s_bal_success));
+ ext4_msg(sb, KERN_INFO,
-+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops",
++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0]),
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2]));
++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2]),
++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops",
+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0]),