__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.
HPE-bug-id: LUS-12311
Signed-off-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Change-Id: Ib03d78739997caa6d13690b41ef7d01609a3623b
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55111
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@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;