md: handle operation chaining in raid5_run_ops
authorDan Williams <dan.j.williams@intel.com>
Fri, 27 Jun 2008 22:32:09 +0000 (08:32 +1000)
committerNeil Brown <neilb@notabene.brown>
Fri, 27 Jun 2008 22:32:09 +0000 (08:32 +1000)
commit7b3a871ed995270268a481404454ceafe1a87478
tree1d86a84bd885f6c24213dd84b5406a38597b457e
parentd8ee0728b5b30d7a6f62c399a95e953616d31f23
md: handle operation chaining in raid5_run_ops

From: Dan Williams <dan.j.williams@intel.com>

Neil said:
> At the end of ops_run_compute5 you have:
>         /* ack now if postxor is not set to be run */
>         if (tx && !test_bit(STRIPE_OP_POSTXOR, &s->ops_run))
>                 async_tx_ack(tx);
>
> It looks odd having that test there.  Would it fit in raid5_run_ops
> better?

The intended global interpretation is that raid5_run_ops can build a chain
of xor and memcpy operations.  When MD registers the compute-xor it tells
async_tx to keep the operation handle around so that another item in the
dependency chain can be submitted. If we are just computing a block to
satisfy a read then we can terminate the chain immediately.  raid5_run_ops
gives a better context for this test since it cares about the entire chain.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Neil Brown <neilb@suse.de>
drivers/md/raid5.c