Hi Neil, I rewrite the implementation of iobarrier for raid1. Patch1/2 are only to easy implemented for patch3.They don't effect the performance. Performance Result: Requirement: A: sync_speed_max = sync_speed_min = 200000 B: echo repair > sync_action Without the patch3: TestA: fio --rw=read --bs=512k --filename=/dev/md0 --offset=1000199467008 --rate=50M --ratemin=30M --name=test --runtime=600s >>READ: io=8861.6MB, aggrb=15123KB/s, minb=15123KB/s, maxb=15123KB/s, mint=600012msec, maxt=600012msec cat /proc/mdstat >>speed=25522K/sec TestB: fio --rw=write --bs=512k --filename=/dev/md0 --offset=1000199467008 --rate=50M --name=test --runtime=600s >>WRITE: io=1939.6MB, aggrb=3309KB/s, minb=3309KB/s, maxb=3309KB/s, mint=600033msec, maxt=600033msec cat /proc/mdstat >>speed=7732K/sec With the patch3: TestA:(Make sure the position of read after resync) fio --rw=read --bs=512k --filename=/dev/md0 --offset=1000199467008 --rate=50m --name=test >>READ: io=12547MB, aggrb=40810KB/s, minb=40810KB/s, maxb=40810KB/s, mint=314815msec, maxt=314815msec cat /proc/mdstat: >>speed=43745K/sec TestB:(Make sure the position of write after resync) fio --rw=write --bs=512k --filename=/dev/md0 --offset=1000199467008 --rate=50m --name=test --runtime=600 >>WRITE: io=30001MB, aggrb=51200KB/s, minb=51200KB/s, maxb=51200KB/s, mint=600001msec, maxt=600001msec cat /proc/mdstat >>speed=26686K/sec TestC:(Make sure the position of read before resync) fio --rw=read --bs=512k --filename=/dev/md0 --offset=0 --rate=50m --name=test --runtime=600 >>READ: io=29725MB, aggrb=50729KB/s, minb=50729KB/s, maxb=50729KB/s, mint=600004msec, maxt=600004msec cat /proc/mdstat >>speed=44839K/sec TestD:(Make sure the positon of write before resync) fio --rw=write --bs=512k --filename=/dev/md0 --offset=0 --rate=50m --name=test --runtime=600 >> WRITE: io=30001MB, aggrb=51200KB/s, minb=51200KB/s, maxb=51200KB/s, mint=600001msec, maxt=600001msec cat /proc/mdstat >>speed=30884K/sec V1:http://www.spinics.net/lists/raid/msg41710.html Jianpeng Ma (3): raid1: Add a filed freeze_array to indicate whether raid in freeze state. radi1: Relace raise_barrier/lower_barrrier with freeze_array/unfreeze_array for reconfigure the array. raid1: Rewrite the implementation of iobarrier. drivers/md/raid1.c | 174 ++++++++++++++++++++++++++++++++++++++++++----------- drivers/md/raid1.h | 5 ++ 2 files changed, 145 insertions(+), 34 deletions(-) -- 1.8.1.2 ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±þ¶¢wø§¶?¡Ü¨}©?²Æ zÚ&j:+v?¨þø¯ù®w¥þ?à2?Þ?¨èÚ&¢)ß¡«a¶Úÿÿûàz¿äz¹Þ?ú+?ù???Ý¢jÿ?wèþf