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 &&
-@@ -2520,6 +2553,93 @@ const struct file_operations ext4_seq_mb
+@@ -2520,6 +2553,96 @@ const struct file_operations ext4_seq_mb
.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
-@@ -2951,6 +3082,16 @@ int ext4_mb_release(struct super_block *
+@@ -2951,6 +3082,17 @@ int ext4_mb_release(struct super_block *
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]),
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 &&
-@@ -2624,6 +2657,92 @@ const struct proc_ops ext4_seq_mb_last_g
+@@ -2624,6 +2657,95 @@ const struct proc_ops ext4_seq_mb_last_g
.proc_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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[2]));
-+ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
++ seq_printf(seq, "\tskipped_c0_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]));
-+ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[1]));
-+ seq_printf(seq, "\tskipped_c3_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
+ 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
-@@ -3042,6 +3165,16 @@ int ext4_mb_release(struct super_block *
+@@ -3042,6 +3165,17 @@ int ext4_mb_release(struct super_block *
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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]),
+ atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ atomic64_read(&sbi->s_bal_cX_failed[2]),
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]),
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 &&
-@@ -2746,6 +2779,92 @@ const struct proc_ops ext4_seq_mb_last_g
+@@ -2746,6 +2779,95 @@ const struct proc_ops ext4_seq_mb_last_g
.proc_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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[2]));
-+ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
++ seq_printf(seq, "\tskipped_c0_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]));
-+ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[1]));
-+ seq_printf(seq, "\tskipped_c3_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
+ 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
-@@ -3185,6 +3308,16 @@ int ext4_mb_release(struct super_block *
+@@ -3185,6 +3308,17 @@ int ext4_mb_release(struct super_block *
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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]),
+ atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ atomic64_read(&sbi->s_bal_cX_failed[2]),
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]),
}
if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND &&
-@@ -2316,6 +2350,93 @@ static const struct seq_operations ext4_
+@@ -2316,6 +2350,96 @@ static const struct seq_operations ext4_
.show = ext4_mb_seq_groups_show,
};
+ 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: %lu\n",
++ seq_printf(seq, "\tuseless_c0_loops: %lu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %lu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %lu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %lu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %lu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ seq_printf(seq, "\tuseless_c3_loops: %lu\n",
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ seq_printf(seq, "\tskipped_c1_loops: %lu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]));
+ seq_printf(seq, "\tskipped_c2_loops: %lu\n",
+ 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),
}
if (sbi->s_group_info) {
-@@ -2936,6 +3064,16 @@ int ext4_mb_release(struct super_block *
+@@ -2936,6 +3064,17 @@ int ext4_mb_release(struct super_block *
atomic_read(&sbi->s_bal_reqs),
atomic_read(&sbi->s_bal_success));
ext4_msg(sb, KERN_INFO,
-+ "mballoc: (%lu, %lu, %lu) useless c(0,1,2) loops",
++ "mballoc: (%lu, %lu, %lu, %lu) useless c(0,1,2,3) loops",
+ atomic64_read(&sbi->s_bal_cX_failed[0]),
+ atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ atomic64_read(&sbi->s_bal_cX_failed[2]),
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%lu, %lu, %lu) skipped c(0,1,2) loops",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]),
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;
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]),
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 &&
-@@ -2719,6 +2752,92 @@
+@@ -2719,6 +2752,95 @@
.proc_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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[2]));
-+ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
++ seq_printf(seq, "\tskipped_c0_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]));
-+ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[1]));
-+ seq_printf(seq, "\tskipped_c3_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
+ 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
-@@ -3166,6 +3289,16 @@
+@@ -3166,6 +3289,17 @@
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) loops",
+ atomic64_read(&sbi->s_bal_cX_failed[0]),
+ atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ atomic64_read(&sbi->s_bal_cX_failed[2]),
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]),
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 &&
-@@ -2643,6 +2676,92 @@
+@@ -2643,6 +2676,95 @@
.proc_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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]));
-+ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[1]));
-+ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c2_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_failed[2]));
-+ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
++ seq_printf(seq, "\tuseless_c3_loops: %llu\n",
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
++ seq_printf(seq, "\tskipped_c0_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]));
-+ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c1_loops: %llu\n",
+ atomic64_read(&sbi->s_bal_cX_skipped[1]));
-+ seq_printf(seq, "\tskipped_c3_loops: %llu\n",
++ seq_printf(seq, "\tskipped_c2_loops: %llu\n",
+ 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
-@@ -3062,6 +3185,16 @@
+@@ -3062,6 +3185,17 @@
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",
+ atomic64_read(&sbi->s_bal_cX_failed[0]),
+ atomic64_read(&sbi->s_bal_cX_failed[1]),
-+ atomic64_read(&sbi->s_bal_cX_failed[2]));
++ atomic64_read(&sbi->s_bal_cX_failed[2]),
++ atomic64_read(&sbi->s_bal_cX_failed[3]));
+ ext4_msg(sb, KERN_INFO,
+ "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops",
+ atomic64_read(&sbi->s_bal_cX_skipped[0]),