raid5: fix broken async operation chain
authorShaohua Li <shli@kernel.org>
Wed, 13 May 2015 16:30:08 +0000 (09:30 -0700)
committerNeilBrown <neilb@suse.de>
Wed, 20 May 2015 23:14:20 +0000 (09:14 +1000)
ops_run_reconstruct6() doesn't correctly chain asyn operations. The tx returned
by async_gen_syndrome should be added as the dependent tx of next stripe.

The issue is introduced by commit 59fc630b8b5f9f21c8ce3ba153341c107dce1b0c
    RAID5: batch adjacent full stripe write

Reported-and-tested-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid5.c

index 1ba97fdc6df1e3a6df76b42aa0e756c01644a385..b9f2b9cc60607e29c2c240b2516e5c8af49091d3 100644 (file)
@@ -1822,7 +1822,7 @@ again:
        } else
                init_async_submit(&submit, 0, tx, NULL, NULL,
                                  to_addr_conv(sh, percpu, j));
-       async_gen_syndrome(blocks, 0, count+2, STRIPE_SIZE,  &submit);
+       tx = async_gen_syndrome(blocks, 0, count+2, STRIPE_SIZE,  &submit);
        if (!last_stripe) {
                j++;
                sh = list_first_entry(&sh->batch_list, struct stripe_head,