Whamcloud - gitweb
LU-17851 ldiskfs: restart long fallocate tx 11/55111/3
authorAlexander Zarochentsev <alexander.zarochentsev@hpe.com>
Mon, 29 Apr 2024 17:37:34 +0000 (17:37 +0000)
committerOleg Drokin <green@whamcloud.com>
Wed, 29 May 2024 04:42:08 +0000 (04:42 +0000)
__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>
lustre/osd-ldiskfs/osd_io.c

index 7d7a609..7f6688a 100644 (file)
@@ -2243,7 +2243,15 @@ static int osd_fallocate_preallocate(const struct lu_env *env,
                }
 
                /* 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;