Revert "md/raid5: For odirect-write performance, do not set STRIPE_PREREAD_ACTIVE."
authorNeilBrown <neilb@suse.de>
Wed, 19 Sep 2012 02:48:30 +0000 (12:48 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 19 Sep 2012 02:48:30 +0000 (12:48 +1000)
This reverts commit 895e3c5c58a80bb9e4e05d9ac38b4f30e0f97d80.

While this patch seemed like a good idea and did help some workloads,
it hurts other workloads.
Large sequential O_DIRECT writes were faster,
Small random O_DIRECT writes were slower.

Other changes (batching RAID5 writes) have improved the sequential
writes using a different mechanism, so the net result of this patch
is definitely negative.  So revert it.

Reported-by: Shaohua Li <shli@kernel.org>
Tested-by: Jianpeng Ma <majianpeng@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid5.c

index adda94df5eb2352775e64fb7fae4e88c6e89a98b..380cb68856b1898d47a7cf15aea824f81d6eec36 100644 (file)
@@ -4192,7 +4192,7 @@ static void make_request(struct mddev *mddev, struct bio * bi)
                        finish_wait(&conf->wait_for_overlap, &w);
                        set_bit(STRIPE_HANDLE, &sh->state);
                        clear_bit(STRIPE_DELAYED, &sh->state);
-                       if ((bi->bi_rw & REQ_NOIDLE) &&
+                       if ((bi->bi_rw & REQ_SYNC) &&
                            !test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
                                atomic_inc(&conf->preread_active_stripes);
                        release_stripe_plug(mddev, sh);