--- /dev/null
+Index: linux-3.10.0-799.el7.x86_64/drivers/md/raid5.c
+===================================================================
+--- linux-3.10.0-799.el7.x86_64.orig/drivers/md/raid5.c
++++ linux-3.10.0-799.el7.x86_64/drivers/md/raid5.c
+@@ -3096,7 +3096,9 @@ static int add_stripe_bio(struct stripe_
+ bi->bi_next = *bip;
+ *bip = bi;
+ raid5_inc_bi_active_stripes(bi);
+ md_write_inc(conf->mddev, bi);
++ if ((bi->bi_rw & REQ_SYNC) && !forwrite)
++ clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags); /* force to read from disk. */
+
+ if (forwrite) {
+ /* check if page is covered */
+@@ -5548,6 +5550,9 @@ static void raid5_make_request(struct md
+ bi, 0);
+ bio_endio(bi, 0);
+ }
++
++ if (bi->bi_rw & REQ_SYNC)
++ md_wakeup_thread(mddev->thread);
+ }
+
+ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);