__ext4_journal_ensure_credits() may allow a long fs operation
like fallocate to run for too long, if the initial credits
estimation is enough high.
The fix is to force tx restart if tx state is not T_RUNNING.
Lustre-change: https://review.whamcloud.com/55111
Lustre-commit:
f317b5c30e478fdecceea4bd07c85ff305e9d81d
HPE-bug-id: LUS-12311
Signed-off-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Change-Id: Ib03d78739997caa6d13690b41ef7d01609a3623b
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/55247
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
}
/* TODO: quota check */
- rc = osd_extend_restart_trans(handle, credits, inode);
+ if (handle->h_transaction->t_state == T_RUNNING) {
+ rc = osd_extend_restart_trans(handle, credits, inode);
+ } else {
+ rc = ldiskfs_journal_restart(handle, credits
+#ifdef HAVE_LDISKFS_JOURNAL_ENSURE_CREDITS
+ ,ldiskfs_trans_default_revoke_credits(inode->i_sb)
+#endif
+ );
+ }
if (rc)
break;