|
@@ -1986,6 +1986,26 @@ retry:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Make sure the last group has enough space so that it's
|
|
|
|
+ * guaranteed to have enough space for all metadata blocks
|
|
|
|
+ * that it might need to hold. (We might not need to store
|
|
|
|
+ * the inode table blocks in the last block group, but there
|
|
|
|
+ * will be cases where this might be needed.)
|
|
|
|
+ */
|
|
|
|
+ if ((ext4_group_first_block_no(sb, n_group) +
|
|
|
|
+ ext4_group_overhead_blocks(sb, n_group) + 2 +
|
|
|
|
+ sbi->s_itb_per_group + sbi->s_cluster_ratio) >= n_blocks_count) {
|
|
|
|
+ n_blocks_count = ext4_group_first_block_no(sb, n_group);
|
|
|
|
+ n_group--;
|
|
|
|
+ n_blocks_count_retry = 0;
|
|
|
|
+ if (resize_inode) {
|
|
|
|
+ iput(resize_inode);
|
|
|
|
+ resize_inode = NULL;
|
|
|
|
+ }
|
|
|
|
+ goto retry;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* extend the last group */
|
|
/* extend the last group */
|
|
if (n_group == o_group)
|
|
if (n_group == o_group)
|
|
add = n_blocks_count - o_blocks_count;
|
|
add = n_blocks_count - o_blocks_count;
|