diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 61845bf4036f23b3b7764abedcd9192ba78a41c5..83f752d68261fe963e1fe415f684b084a76efe02 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -861,9 +861,11 @@ class MergeRequest < ActiveRecord::Base
       paths: paths
     )
 
-    active_diff_notes.each do |note|
-      service.execute(note)
-      Gitlab::Timeless.timeless(note, &:save)
+    transaction do
+      active_diff_notes.each do |note|
+        service.execute(note)
+        Gitlab::Timeless.timeless(note, &:save)
+      end
     end
   end
 
diff --git a/changelogs/unreleased/fix_broken_diff_discussions.yml b/changelogs/unreleased/fix_broken_diff_discussions.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4551212759f73540ee1f766a805960004bd95fe5
--- /dev/null
+++ b/changelogs/unreleased/fix_broken_diff_discussions.yml
@@ -0,0 +1,4 @@
+---
+title: Make MR-review-discussions more reliable
+merge_request:
+author: