diff --git a/CHANGELOG b/CHANGELOG
index c1c90903d5d202b88688ebacb4b05d252c22b7f4..84739fab82b931d187bfd0579623c819b10f49a1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -26,6 +26,7 @@ v 8.6.0 (unreleased)
   - Show labels in dashboard and group milestone views
   - Add main language of a project in the list of projects (Tiago Botelho)
   - Add ability to show archived projects on dashboard, explore and group pages
+  - Remove fork link closes all merge requests opened on source project (Florent Baldino)
 
 v 8.5.5
   - Ensure removing a project removes associated Todo entries
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index aea08ecce3e377dcfc54b18b2e263d226cc7ec8e..a26d11459f05f55fae7c89e093efe97d188bae09 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -72,7 +72,7 @@ class ProjectsController < ApplicationController
   def remove_fork
     return access_denied! unless can?(current_user, :remove_fork_project, @project)
 
-    if @project.unlink_fork
+    if @project.unlink_fork(current_user)
       flash[:notice] = 'The fork relationship has been removed.'
     end
   end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index c1e18bb3cc519129137385995c18bd50415cbd07..18ec48b57f4eef57d02bb60773f0d806d433776e 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -137,6 +137,7 @@ class MergeRequest < ActiveRecord::Base
   scope :by_milestone, ->(milestone) { where(milestone_id: milestone) }
   scope :in_projects, ->(project_ids) { where("source_project_id in (:project_ids) OR target_project_id in (:project_ids)", project_ids: project_ids) }
   scope :of_projects, ->(ids) { where(target_project_id: ids) }
+  scope :from_project, ->(project) { where(source_project_id: project.id) }
   scope :merged, -> { with_state(:merged) }
   scope :closed_and_merged, -> { with_states(:closed, :merged) }
 
diff --git a/app/models/project.rb b/app/models/project.rb
index 65829bec77aa921ab7b76875168b2573f4cb2eeb..859758293e151c912948836bd1ce532bcbb2876d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -890,12 +890,22 @@ class Project < ActiveRecord::Base
     self.builds_enabled = true
   end
 
-  def unlink_fork
+  def unlink_fork(user)
     if forked?
       forked_from_project.lfs_objects.find_each do |lfs_object|
         lfs_object.projects << self
       end
 
+      merge_requests = forked_from_project.merge_requests.opened.from_project(self)
+
+      unless merge_requests.empty?
+        close_service = MergeRequests::CloseService.new(self, user)
+
+        merge_requests.each do |mr|
+          close_service.execute(mr)
+        end
+      end
+
       forked_project_link.destroy
     end
   end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 2fa38a5d3d384158f982b2697fd296b9c0f81546..ba4fb2f8222d309662b4ae3e29d2448ea5f9c149 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -647,4 +647,23 @@ describe Project, models: true do
       project.expire_caches_before_rename('foo')
     end
   end
+
+  describe '#unlink_fork' do
+    let(:fork_link) { create(:forked_project_link) }
+    let(:fork_project) { fork_link.forked_to_project }
+    let(:user) { create(:user) }
+    let(:merge_request) { create(:merge_request, source_project: fork_project, target_project: fork_link.forked_from_project) }
+    let!(:close_service) { MergeRequests::CloseService.new(fork_project, user) }
+
+    it 'remove fork relation and close all pending merge requests' do
+      allow(MergeRequests::CloseService).to receive(:new).
+        with(fork_project, user).
+        and_return(close_service)
+
+      expect(close_service).to receive(:execute).with(merge_request)
+      expect(fork_project.forked_project_link).to receive(:destroy)
+
+      fork_project.unlink_fork(user)
+    end
+  end
 end