From: Guoqing Jiang <guoqing.jiang@xxxxxxxxxxxxxxx> Hi, If asynchronous write io happened in raid1 array, data could be inconsistent among member devices though usually people would think the data should always be the same in each devices for raid1. And since we had addressed data inconsistency issue for write behind device if it is a multiqueue device, then it is possible and straightforward to extend the same mechanism to address similar issue. with this patchset, we can enable io serialization for write. Of course, the performance is not better than before, it could drop around 10% during my tests. Patch 1 just renames all the write-behind stuffs, no function change. Patch 2 adds is_force parameter to mddev_create/destroy_serial_pool. Patch 3 serialize_policy sysfs node is added to enable/disable serialization. Patch 4 serializes the overlap write. Patch 5 makes serial_info_pool still available if serialize_policy is true. Patch 6 replaces list with rb tree for performance reason. Patch 7 uses bucket based mechanism to improve performance further. Patch 8 reorgnizes code. Thanks, Guoqing Guoqing Jiang (8): md: rename wb stuffs md: add is_force parameter for some funcs md: add serialize_policy sysfs node for raid1 raid1: serialize the overlap write md: don't destroy serial_info_pool if serialize_policy is true md: switch from list to rb tree for IO serialization md/raid1: use bucket based mechanism for IO serialization md/raid1: introduce wait_for_serialization drivers/md/md-bitmap.c | 20 ++-- drivers/md/md.c | 226 +++++++++++++++++++++++++++++++++-------- drivers/md/md.h | 34 ++++--- drivers/md/raid1.c | 210 ++++++++++++++++++++++++++++---------- 4 files changed, 369 insertions(+), 121 deletions(-) -- 2.17.1