diff --git a/changelog.d/7554.misc b/changelog.d/7554.misc
new file mode 100644
index 0000000000000000000000000000000000000000..7c35c46aa69d9339dc5516509d2d20efb001f784
--- /dev/null
+++ b/changelog.d/7554.misc
@@ -0,0 +1 @@
+Fix some test code to not mangle stacktraces, to make it easier to debug errors.
diff --git a/synapse/util/patch_inline_callbacks.py b/synapse/util/patch_inline_callbacks.py
index fdff1957716f2f3e4d286116fe4b1c0528db8241..2605f3c65b8592b7c61bfad7c1c9eb3f9357a0d9 100644
--- a/synapse/util/patch_inline_callbacks.py
+++ b/synapse/util/patch_inline_callbacks.py
@@ -186,10 +186,15 @@ def _check_yield_points(f: Callable, changes: List[str]):
                     )
                     raise Exception(err)
 
+            # the wrapped function yielded a Deferred: yield it back up to the parent
+            # inlineCallbacks().
             try:
                 result = yield d
-            except Exception as e:
-                result = Failure(e)
+            except Exception:
+                # this will fish an earlier Failure out of the stack where possible, and
+                # thus is preferable to passing in an exeception to the Failure
+                # constructor, since it results in less stack-mangling.
+                result = Failure()
 
             if current_context() != expected_context: