|
@@ -2943,7 +2943,7 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac,
|
|
|
ext4_error(sb, "Allocating blocks %llu-%llu which overlap "
|
|
|
"fs metadata", block, block+len);
|
|
|
/* File system mounted not to panic on error
|
|
|
- * Fix the bitmap and repeat the block allocation
|
|
|
+ * Fix the bitmap and return EFSCORRUPTED
|
|
|
* We leak some of the blocks here.
|
|
|
*/
|
|
|
ext4_lock_group(sb, ac->ac_b_ex.fe_group);
|
|
@@ -2952,7 +2952,7 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac,
|
|
|
ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
|
|
|
err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh);
|
|
|
if (!err)
|
|
|
- err = -EAGAIN;
|
|
|
+ err = -EFSCORRUPTED;
|
|
|
goto out_err;
|
|
|
}
|
|
|
|
|
@@ -4517,18 +4517,7 @@ repeat:
|
|
|
}
|
|
|
if (likely(ac->ac_status == AC_STATUS_FOUND)) {
|
|
|
*errp = ext4_mb_mark_diskspace_used(ac, handle, reserv_clstrs);
|
|
|
- if (*errp == -EAGAIN) {
|
|
|
- /*
|
|
|
- * drop the reference that we took
|
|
|
- * in ext4_mb_use_best_found
|
|
|
- */
|
|
|
- ext4_mb_release_context(ac);
|
|
|
- ac->ac_b_ex.fe_group = 0;
|
|
|
- ac->ac_b_ex.fe_start = 0;
|
|
|
- ac->ac_b_ex.fe_len = 0;
|
|
|
- ac->ac_status = AC_STATUS_CONTINUE;
|
|
|
- goto repeat;
|
|
|
- } else if (*errp) {
|
|
|
+ if (*errp) {
|
|
|
ext4_discard_allocated_blocks(ac);
|
|
|
goto errout;
|
|
|
} else {
|